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

Perl DBI inserisce più righe usando la capacità di inserimento multiplo nativo di MySQL

Ci sono due approcci. Puoi inserire (?, ?, ?) un numero di volte in base alla dimensione dell'array. La manipolazione del testo sarebbe qualcosa del tipo:

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

Quindi appiattisci l'array per chiamare execute() . Eviterei questo modo a causa delle spinose manipolazioni di stringhe e array che devono essere eseguite.

L'altro modo consiste nell'iniziare una transazione, quindi eseguire più volte una singola istruzione di inserimento.

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;

Questo è un po' più lento del primo metodo, ma evita comunque di riesaminare l'istruzione. Evita anche le sottili manipolazioni della prima soluzione, pur essendo atomica e consentendo l'ottimizzazione dell'I/O del disco.