Mysql 在perl中运行多个sql脚本

Mysql 在perl中运行多个sql脚本,mysql,perl,dbi,Mysql,Perl,Dbi,我有5.sql脚本,可以创建表并插入到表中。我想在PERL中将它们作为事务一起运行。 我在谷歌上搜索过,但只有我能找到关于使用批处理脚本运行脚本的信息。 我不知道如何使用PERL DBI作为事务一起运行脚本。 谁能帮忙吗。 我是perl和mysql新手,我不知道怎么做 根据Barmar的建议,我正试图这样做: #!/usr/bin/perl use strict; use warnings; use DBI; use Data::Dumper; my $user="root"; my $pas

我有5.sql脚本,可以创建表并插入到表中。我想在PERL中将它们作为事务一起运行。 我在谷歌上搜索过,但只有我能找到关于使用批处理脚本运行脚本的信息。 我不知道如何使用PERL DBI作为事务一起运行脚本。 谁能帮忙吗。 我是perl和mysql新手,我不知道怎么做

根据Barmar的建议,我正试图这样做:

#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Data::Dumper;

my $user="root";
my $password="M3m01r!@#";
my $db="DBI:$driver:database=$database";

my $dbh = DBI->connect("DBI:mysql:database=testdb;mysql_socket=/tmp/mysql.sock",$user,$password) or die "could not connect $DBI::errstr\n";
my $st = $dbh->prepare("mysql -u root -p < rr.sql") or die "$DBI::errstr\n";
$st->execute();
#/usr/bin/perl
严格使用;
使用警告;
使用DBI;
使用数据::转储程序;
my$user=“root”;
我的$password=“M3m01r!@#”;
my$db=“DBI:$driver:database=$database”;
my$dbh=DBI->connect(“DBI:mysql:database=testdb;mysql\u socket=/tmp/mysql.sock”,$user$password)或die“无法连接$DBI::errstr\n”;
my$st=$dbh->prepare(“mysql-u root-pexecute();
但它抛出了这个错误

DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql -u root -p < rr.sql' at line 1 at dbi.pl line 15.
DBD::mysql::st execute失败:您的SQL语法有错误;在dbi.pl第15行第1行的“MySQL-u root-p

有人能帮忙吗?

只要将文件读入Perl变量,然后使用Perl DBI执行它们。如果文件失败,我如何回滚?或者有没有一种方法,我可以将所有5个sql脚本放在一个sql脚本中,然后执行运行所有其他sql脚本的单个sql脚本忘记脚本。它们只是SQL查询。一旦将它们放入Perl变量中,它们来自何处就无关紧要了。使用Perl DBI的方式与直接将查询放入Perl中的方式相同,不能通过多个批处理文件“共享”事务。将它们放在一起,并按照@Barmar所说的使用DBI执行。
 ############################################################################
 my $st = $dbh->prepare("mysql -u root -p < rr.sql") or die "$DBI::errstr\n";
 ############################################################################
 my $ferret_query = "select name, dob, type from ferret order by dob";
 my $sth = $dbh->prepare($ferret_query);
 $sth->execute()