sql >> データベース >  >> RDS >> Mysql

mysqlの暗黙のコミットを防ぐ方法

    私がうまく試したもう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の場合と同じであるため、これは一貫した動作です...

    この機能リクエストを復活させるには、機能リクエストの「スパムキャンペーン」を開始する必要があるかもしれません。



    1. MySQLでのPOSITION()関数のしくみ

    2. MySQLi結果セットでのPHPForeach

    3. ある列で順序付けられ、別の列で区別される行を選択する

    4. PHPから生成されたHTMLから呼び出された関数を使用してMYSQLデータベースを更新するAJAX