Innym dziwacznym podejściem, które właśnie wypróbowałem z powodzeniem, jest pobranie pliku DDL do tworzenia tabeli za pomocą polecenia specyficznego dla mysql
SHOW CREATE TABLE `tableName`
Następnie zrób trochę magii wyrażeń regularnych i stwórz nowe zapytanie DDL, które utworzy tabelę tymczasową opartą na oryginalnej tabeli, ze wszystkimi zmianami alter table zawartymi w tabeli create.
W moim projekcie opartym na PHP wykonałem następujące czynności, aby dodać unikalny indeks do tabeli tymczasowej. To załatwiło sprawę i w trakcie transakcji nie nastąpiło żadne niejawne zatwierdzenie.
$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);
EDYTUJ Przy okazji oto kilka raportów o błędach (funkcjach) (od wielu lat). W pierwszym można zobaczyć odpowiedź (z 2006 r.), która stwierdza:ponieważ to zachowanie jest takie samo jak w Oracle db, jest to spójne zachowanie...
Być może należy zainicjować „kampanię spamowania” z prośbą o funkcję, aby ta prośba została przywrócona!