Perl将数据从一个DB复制到另一个DB

时间:2016-11-22 16:43:48

标签: mysql perl

我遇到一个特殊问题,我需要将某些表中的数据从一个数据库复制到另一个数据库,这两个数据库都在同一个实例中运行。 重要的是要注意两个DB中的表结构是相同的,我不能使用mysqldump,因为我只需要复制几个表。

由于表格结构相同,我不知道如何从一个数据库和select *到另一个数据库执行等效的insert *,我真的不知道想要使用列名,因为我希望表结构完全相同。 假设它将分两步完成,第1步从一个数据库中选择记录而第二步返回另一个数据库是否正确?

2 个答案:

答案 0 :(得分:2)

您可以使用INSERT INTO ... SELECT construct。如果列名相同,则非常容易,因为您可以完全省略它们。

INSERT INTO new SELECT * FROM old;

从Perl你可以用DBI运行它。

use strict;
use warnings;
use DBI;

my $dbh = DBI->connect($dsn) or die DBI->errstr;

my @tables = qw(
    foo
    bar
    customers
);

foreach my $table ( @tables ) {
    $dbh->do("INSERT INTO new_db.$table SELECT * FROM old_db.$table")
        or die $dbh->errstr;
}

答案 1 :(得分:1)

使用mysqldump,您只能复制某些表:

mysqldump -u... -p... mydb t1 t2 t3

但你可以使用丑陋的想法:

my $sth=$dbh->prepare("select * from table");
while (($row = $sth->fetchrow_arrayref))
{
    my $i;
    for($i=0;$i<=$#$row;$i++)
    {
        $row->[$i] = $dbh->quote($row->[$i]);
    }
    $dbh2->do("insert into table values (". join(',', @$row) . ")");
}
$sth->finish();

我不确定这种情况是否适用于所有情况。

相关问题