Perl + DBI + MySQL:如何运行多个查询/语句



目前,我在MYSQL上运行多个语句,如下;

my $sth1 = $dbh->prepare("ALTER TABLE whatever....");
my $sth2 = $dbh->prepare("UPDATE whatever....");
my $sth3 = $dbh->prepare("ALTER TABLE whatever....");
my $sth4 = $dbh->prepare("DROP TABLE whatever....");
my $sth5 = $dbh->prepare("DROP TABLE whatever....");

$sth1->execute;
$sth1->finish;
$sth2->execute;
$sth2->finish;
$sth3->execute;
$sth3->finish;
$sth4->execute;
$sth4->finish;
$sth5->execute;
$sth5->finish;

这段代码运行良好。

然而,我有大约50多个这样的查询。所以你可以想象上面直线的长度。我在上面粘贴的只是5个查询。

问题:

是否有更好的优雅的方式运行多个MySQL查询/语句使用 Perl DBI

至少应该迭代sql字符串。将or die添加到execute方法中也是一个好主意:

my @sql = (
    q{ALTER TABLE whatever....},
    q{UPDATE whatever....},
    q{ALTER TABLE whatever....},
    q{DROP TABLE whatever....},
    q{DROP TABLE whatever....},
);
for (@sql) {
    my $sth = $dbh->prepare($_);
    $sth->execute or die $dbh->errstr;
}

DBD::mysql有一个参数mysql_multi_statements:

从MySQL 4.1开始,可以通过使用此选项启用以分号(;)分隔的多条语句。如果还启用了服务器端准备好的语句,启用此选项可能会导致问题。

最新更新