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

Cómo evitar la confirmación implícita de mysql

Otro enfoque pirateado que acabo de probar con éxito es obtener el DDL de la tabla de creación a través del comando específico de mysql

SHOW CREATE TABLE `tableName`

Luego haga algo de magia con expresiones regulares y elabore una nueva consulta DDL que creará una tabla temporal basada en la tabla original, con todos los cambios de la tabla modificada incorporados en la tabla de creación.

En mi proyecto basado en PHP, hice lo siguiente para agregar un índice único a una tabla temporal. Hizo el truco y no se produjo más compromiso implícito en medio de la transacción.

$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 Por cierto, aquí hay algunos informes de errores (características) (desde hace muchos años). En el primero puede ver una respuesta (que data de 2006) que dice:dado que este comportamiento es el mismo que en Oracle db, este es el consistente...

¡Tal vez se deba iniciar una "campaña de spam" de solicitud de función para que esta solicitud de función reviva!