Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Perl DBI fügt mehrere Zeilen ein, indem die systemeigene Multiple-Insert-Fähigkeit von mysql verwendet wird

Es gibt zwei Ansätze. Sie können (?, ?, ?) einfügen mehrmals, basierend auf der Größe des Arrays. Die Textmanipulation wäre so etwas wie:

my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );

Flachen Sie dann das Array zum Aufrufen von execute() ab . Ich würde diesen Weg wegen der dornigen String- und Array-Manipulation vermeiden, die durchgeführt werden muss.

Die andere Möglichkeit besteht darin, eine Transaktion zu beginnen und dann mehrmals eine einzelne Insert-Anweisung auszuführen.

my $sql = 'INSERT INTO tbl (col1, col2, col3)';
$dbh->{AutoCommit} = 0;
my $sth = $dbh->prepare_cached( $sql );
$sth->execute( @$_ ) for @array;
$sth->finish;
$dbh->{AutoCommit} = 1;

Dies ist etwas langsamer als die erste Methode, vermeidet aber dennoch das erneute Parsen der Anweisung. Es vermeidet auch die subtilen Manipulationen der ersten Lösung, ist aber dennoch atomar und ermöglicht die Optimierung der Festplatten-E/A.