私がうまく試したもう1つのハッキーなアプローチは、mysql固有のコマンドを使用してcreatetableDDLを取得することです
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の場合と同じであるため、これは一貫した動作です...
この機能リクエストを復活させるには、機能リクエストの「スパムキャンペーン」を開始する必要があるかもしれません。