sql >> Base de Datos >  >> RDS >> Mysql

Perl DBI inserta múltiples filas usando la capacidad de inserción múltiple nativa de mysql

Hay dos enfoques. Puede insertar (?, ?, ?) un número de veces basado en el tamaño de la matriz. La manipulación del texto sería algo como:

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

Luego aplane la matriz para llamar a execute() . Evitaría esta forma debido a la manipulación espinosa de cadenas y matrices que debe realizarse.

La otra forma es comenzar una transacción y luego ejecutar una sola declaración de inserción varias veces.

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;

Este es un poco más lento que el primer método, pero aún evita volver a analizar la declaración. También evita las manipulaciones sutiles de la primera solución, sin dejar de ser atómico y permitir que se optimice la E/S del disco.