sql >> Databasteknik >  >> RDS >> Mysql

Hur man förhindrar mysql implicit commit

Ett annat hackigt tillvägagångssätt som jag just försökte med framgång är att få skapa tabellen DDL via det mysql-specifika kommandot

SHOW CREATE TABLE `tableName`

Gör sedan lite regexp-magi och skapa en ny DDL-fråga som kommer att skapa en temporär tabell baserad på den ursprungliga tabellen, med alla ändringar av tabelländringar inkluderade i skapatabellen.

I mitt PHP-baserade projekt gjorde jag följande för att lägga till ett unikt index till en tillfällig tabell. Det gjorde susen och inget mer implicit åtagande inträffade mitt 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);

REDIGERA Här är förresten några felrapporter (funktioner) (sedan många år). I den första kan du se ett svar (daterat till 2006) som säger:eftersom detta beteende är detsamma som i oracle db, är detta det konsekventa...

Kanske bör en "spamkampanj" för funktionsbegäran initieras för att denna funktionsbegäran ska återupplivas!



  1. Analysera tabell- och kolumnnamn från SQL/HQL Java

  2. 2018 i recension:7 MariaDB-milstolpar du kanske har missat

  3. Finns det någon anledning att oroa sig för kolumnordningen i en tabell?

  4. Hur sorterar man efter tidigare datum i databasen?