sql >> Databasteknik >  >> RDS >> Mysql

Perl DBI infogar flera rader med mysql native multiple insert förmåga

Det finns två tillvägagångssätt. Du kan infoga (?, ?, ?) ett antal gånger baserat på storleken på arrayen. Textmanipulationen skulle vara något i stil med:

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

Platta sedan ut arrayen för att anropa execute() . Jag skulle undvika det här på grund av den taggiga sträng- och arraymanipulation som måste göras.

Det andra sättet är att påbörja en transaktion och sedan köra en enkel infogningssats flera gånger.

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;

Detta är lite långsammare än den första metoden, men det undviker ändå att reparera påståendet. Den undviker också de subtila manipulationerna av den första lösningen, samtidigt som den fortfarande är atomär och tillåter disk I/O att optimeras.



  1. Ändra användardefinierad typ i SQL Server

  2. Hur man konfigurerar AppArmor för PostgreSQL och TimescaleDB

  3. Hur kör man ett MySQL-kommando från ett skalskript?

  4. Tabell muterar, trigger/funktion kanske inte ser den (stoppar ett medelbetyg från att sjunka under 2,5)