sql >> Database >  >> RDS >> Mysql

Hoe mysql impliciete commit te voorkomen?

Een andere hacky-aanpak die ik zojuist met succes heb geprobeerd, is om de DDL-tabel te maken via de mysql-specifieke opdracht

SHOW CREATE TABLE `tableName`

Maak dan wat regexp-magie en maak een nieuwe DDL-query die een tijdelijke tabel zal maken op basis van de originele tabel, met alle wijzigingen in de tabel wijzigen die in de tabel maken zijn verwerkt.

In mijn op PHP gebaseerde project heb ik het volgende gedaan om een ​​unieke index aan een tijdelijke tabel toe te voegen. Het werkte en er vond geen impliciete commit meer plaats tijdens de transactie.

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

BEWERKEN Trouwens, hier zijn enkele bug (functie) rapporten (sinds vele jaren). In de eerste zie je een antwoord (daterend uit 2006) waarin staat:aangezien dit gedrag hetzelfde is als in oracle db, is dit de consistente...

Misschien moet er een functieverzoek 'spammingcampagne' worden gestart om dit functieverzoek nieuw leven in te blazen!



  1. Krijg resultaten die binnen de markeringsradiussen vallen uit de database

  2. 4 soorten informatie om in uw CRM-database op te nemen

  3. controleer op dubbele gegevens voordat u deze invoegt

  4. Verschil tussen Oracle's plus (+) notatie en ansi JOIN notatie?