我正在努力将数据从一个db1迁移到另一个db2。
我有一个场景,其中表Person存在于两个数据库(db1和db2)中。
但是db2中的表有一个额外的列。这是编写查询以将数据从db1 Person迁移到db2 Person的最有效方法。
我写的如下,这是写它的最好方法吗?因为如果我有更多的列,只有一个额外的列,因此我需要在循环语句中提及所有列名。
$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');
}
答案 0 :(得分:2)
如果源表和目标表中存在列不匹配,则使用下面的语法 -
insert into table1(col1,col2,col3) select col1,col2,col3 from table2;
答案 1 :(得分:0)
Zafar的答案可能是最好和最快的方法。
但是,如果您确实希望逐行执行此操作,则脚本中的数据库访问的一般规则是:从不访问列而不显式命名。所以:
SELECT *
INSERT INTO table_name VALUES (...)
脚本的更正版本,猜测列名称:
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'
,而是使用undef
,就像ikegami说的那样。)