sql >> Database teknologi >  >> RDS >> Mysql

Perl DBI indsæt flere rækker ved hjælp af mysql native multiple insert-evne

Der er to tilgange. Du kan indsætte (?, ?, ?) et antal gange baseret på størrelsen af ​​arrayet. Tekstmanipulationen ville være noget i retning af:

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

Udglat derefter arrayet for at kalde execute() . Jeg ville undgå denne måde på grund af den tornede streng- og array-manipulation, der skal udføres.

Den anden måde er at starte en transaktion og derefter køre en enkelt insert-sætning flere gange.

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;

Dette er en smule langsommere end den første metode, men det undgår stadig at reparere udsagnet. Den undgår også de subtile manipulationer af den første løsning, mens den stadig er atomart og tillader disk I/O at blive optimeret.



  1. Understøttelse af MariaDB 10.4 i opgraderet dbForge Studio til MySQL, v.8.1

  2. Implementering af rekursive kommentarer i PHP/MySQL

  3. SQL joining spørgsmål

  4. MySQL-vurdering med vægt