Друг хакерски подход, който току-що опитах успешно, е да получа таблицата за създаване на DDL чрез специфичната команда за mysql
SHOW CREATE TABLE `tableName`
След това направете малко магия за редовни изрази и създайте нова DDL заявка, която ще създаде временна таблица, базирана на оригиналната таблица, с всички промени в таблицата за промяна, включени в таблицата за създаване.
В моя проект, базиран на PHP, направих следното, за да добавя уникален индекс към временна таблица. Това свърши работа и по време на транзакцията не се случи повече имплицитен комит.
$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);
РЕДАКТИРАНЕ Между другото, тук има някои доклади за грешки (функции) (от много години). В първия можете да видите отговор (от 2006 г.), който гласи:тъй като това поведение е същото като в oracle db, това е последователното...
Може би трябва да бъде инициирана заявка за функция „кампания за спам“, за да се съживи тази заявка за функция!