sql >> Database >  >> RDS >> Mysql

Perl DBI voegt meerdere rijen in met behulp van mysql native multiple insert-mogelijkheid

Er zijn twee benaderingen. U kunt (?, ?, ?) . invoegen een aantal keren op basis van de grootte van de array. De tekstmanipulatie zou zoiets zijn als:

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

Maak vervolgens de array plat voor het aanroepen van execute() . Ik zou deze manier vermijden vanwege de netelige string- en array-manipulatie die moet worden gedaan.

De andere manier is om een ​​transactie te beginnen en vervolgens een enkele insert-opdracht meerdere keren uit te voeren.

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;

Dit is iets langzamer dan de eerste methode, maar het vermijdt nog steeds dat de instructie opnieuw moet worden ontleed. Het vermijdt ook de subtiele manipulaties van de eerste oplossing, terwijl het nog steeds atomair is en de schijf-I/O kan worden geoptimaliseerd.



  1. MacOS kan MySQL Server niet starten

  2. Kan geen externe verbinding maken met EC2 MySQL-installatie

  3. MySQL-export naar outfile:CSV escape-tekens

  4. BULK INSERT met identiteit (auto-increment) kolom