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

Sådan forhindrer du mysql implicit commit

En anden hacky tilgang, som jeg lige har prøvet med succes, er at få oprettet tabellen DDL via den mysql-specifikke kommando

SHOW CREATE TABLE `tableName`

Lav derefter noget regexp-magi, og lav en ny DDL-forespørgsel, der vil skabe en midlertidig tabel baseret på den originale tabel, med alle ændringer af tabelændringer indarbejdet i oprettelsestabellen.

I mit PHP-baserede projekt gjorde jeg følgende for at tilføje et unikt indeks til en midlertidig tabel. Det gjorde tricket, og der fandt ikke mere implicit forpligtelse sted midt i transaktionen.

$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);

REDIGER Her er forresten nogle fejl (funktions) rapporter (i mange år). I den første kan du se et svar (dateret til 2006), der siger:da denne adfærd er den samme som i oracle db, er dette den konsistente...

Måske skal der startes en "spamkampagne" for en funktionsanmodning, for at denne funktionsanmodning kan genoplives!



  1. Hvad betyder ORDER BY (SELECT NULL)?

  2. mysqli_query() forventer mindst 2 parametre, 1 givet i?

  3. Skal erklære variablen @myvariable fejl med ADO-parameteriseret forespørgsel

  4. hvordan tilføjes, redigeres og slettes kommasepareret værdi af databasen.?