Mysql 将行从一个表插入到另一个表,该表有额外的列?
我正在研究将数据从一个db1迁移到另一个db2 我有一个场景,其中TablePerson在两个数据库(db1和db2)中都存在 但是db2中的表有一个额外的列。这是编写查询以将数据从db1 Person迁移到db2 Person的最佳有效方法 我写的如下,这是最好的写法吗?因为如果我有更多的列,只有一个额外的列,因此我需要在循环语句中提到所有的列名Mysql 将行从一个表插入到另一个表,该表有额外的列?,mysql,database,perl,Mysql,Database,Perl,我正在研究将数据从一个db1迁移到另一个db2 我有一个场景,其中TablePerson在两个数据库(db1和db2)中都存在 但是db2中的表有一个额外的列。这是编写查询以将数据从db1 Person迁移到db2 Person的最佳有效方法 我写的如下,这是最好的写法吗?因为如果我有更多的列,只有一个额外的列,因此我需要在循环语句中提到所有的列名 $select = $dbh1->prepare("SELECT * FROM person"); $insert = $dbh2->p
$select = $dbh1->prepare("SELECT * FROM person");
$insert = $dbh2->prepare("INSERT INTO PERSON VALUES (?,?,?,?,?)");
$select->execute;
while ( my($PR_ID,$NAME,$LASTNAME) = $select->fetchrow_array )
{
$insert->execute($PR_ID,$NAME,$LASTNAME,'NULL','NULL');
}
若源表和目标表中存在列不匹配,则使用如下语法-
insert into table1(col1,col2,col3) select col1,col2,col3 from table2;
若源表和目标表中存在列不匹配,则使用如下语法-
insert into table1(col1,col2,col3) select col1,col2,col3 from table2;
扎法尔的答案可能是实现这一点的最好、最快的方法 但是,如果您确实希望逐行执行此操作,那么脚本中数据库访问的一条一般规则是:在未显式命名的情况下,永远不要访问列。因此:
- 否
选择*
- 无
插入表\u名称值(…)
my $select = $dbh1->prepare("SELECT pr_id, name, lastname FROM person");
my $insert = $dbh2->prepare("INSERT INTO PERSON(pr_id, name, last_name) VALUES (?,?,?)");
$select->execute;
while ( my($PR_ID,$NAME,$LASTNAME) = $select->fetchrow_array )
{
$insert->execute($PR_ID,$NAME,$LASTNAME);
}
(请注意,您不需要在新表中指定额外的列,只要它们可以为NULL,并且您希望值为NULL。如果您确实希望自己插入NULL,请不要使用
'NULL'
,而是使用undef
,就像ikegami所说的那样。)Zafar的答案可能是最好、最快的方法
但是,如果您确实希望逐行执行此操作,那么脚本中数据库访问的一条一般规则是:在未显式命名的情况下,永远不要访问列。因此:
- 否
选择*
- 无
插入表\u名称值(…)
my $select = $dbh1->prepare("SELECT pr_id, name, lastname FROM person");
my $insert = $dbh2->prepare("INSERT INTO PERSON(pr_id, name, last_name) VALUES (?,?,?)");
$select->execute;
while ( my($PR_ID,$NAME,$LASTNAME) = $select->fetchrow_array )
{
$insert->execute($PR_ID,$NAME,$LASTNAME);
}
(请注意,您不需要在新表中指定额外的列,只要它们可以为NULL,并且您希望值为NULL。如果您确实希望自己插入NULL,请不要使用
'NULL'
,而是使用undef
,就像ikegami说的那样。)Btw,如果您希望插入NULL而不是字符串NULL
,您想使用undef
而不是'NULL'
。另外,如果您想插入NULL而不是字符串NULL
,您想使用undef
而不是'NULL'
。