Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Perl DBI insere várias linhas usando a capacidade de inserção múltipla nativa do mysql


Existem duas abordagens. Você pode inserir (?, ?, ?) várias vezes com base no tamanho da matriz. A manipulação do texto seria algo como:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );

Em seguida, nivele o array para chamar execute() . Eu evitaria esse caminho por causa da manipulação espinhosa de strings e arrays que precisa ser feita.

A outra maneira é iniciar uma transação e, em seguida, executar uma única instrução de inserção várias vezes.
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;

Isso é um pouco mais lento que o primeiro método, mas ainda evita a nova análise da instrução. Ele também evita as manipulações sutis da primeira solução, enquanto ainda é atômico e permite que a E/S do disco seja otimizada.