Mysql 将行从一个表插入到另一个表,该表有额外的列?

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

我正在研究将数据从一个db1迁移到另一个db2

我有一个场景,其中TablePerson在两个数据库(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');
}

若源表和目标表中存在列不匹配,则使用如下语法-

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'