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

Como evitar o commit implícito do mysql


Outra abordagem hacky que acabei de tentar com sucesso é obter a tabela de criação DDL através do comando específico do mysql
SHOW CREATE TABLE `tableName`

Em seguida, faça alguma mágica regexp e crie uma nova consulta DDL que criará uma tabela temporária baseada na tabela original, com todas as alterações de alteração de tabela incorporadas à tabela de criação.

No meu projeto baseado em PHP, fiz o seguinte para adicionar um índice exclusivo a uma tabela temporária. Ele fez o truque e não ocorreu mais commit implícito no meio da transação.
$createDDL = ... get from SHOW CREATE TABLE `tableName`
$nr = 0;
$createDDL = preg_replace("/CREATE TABLE `$tableName` \(/", "CREATE TEMPORARY TABLE `$tmpName` (\nUNIQUE `ukey-1` ($uniqCols),", $createDDL, -1, $nr);
if (!$nr)
  throw new Exception("CREATE TABLE replacement error. No reps made.");
mysqli_query($con, $createDDL);

EDITAR A propósito, aqui estão alguns relatórios de bugs (recursos) (desde muitos anos). No primeiro você pode ver uma resposta (datada de 2006) que afirma:como esse comportamento é o mesmo do oracle db, esse é o consistente ...

Talvez uma solicitação de recurso "campanha de spam" deva ser iniciada para que essa solicitação de recurso seja reativada!