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!