sql >> データベース >  >> Database Tools >> phpMyAdmin

ALTER TABLEでトランザクションを使用できますか?

    一部のステートメント(特に DDL )MySQLでは暗黙のコミットを引き起こします それらは実行され、ロールバックできません> -そのため、これにより、以前のDML変更もロールバックされなくなります。

    このセクションにリストされているステートメント(およびそれらの同義語)は、ステートメントを実行する前にCOMMITを実行したかのように、現在のセッションでアクティブなトランザクションを暗黙的に終了します。 。 MySQL 5.5.3以降、これらのステートメントのほとんどは、実行後に暗黙のコミットも引き起こします。詳細については、このセクションの最後を参照してください。

    ALTER TABLE以降 は影響を受けるステートメントの1つであり、SQLバッチは次のように効果的に扱われます。

    START TRANSACTION;
    INSERT INTO `users` VALUES(NULL, 'User A', '[email protected]', '4', 'User A');
    
    COMMIT; -- prevents ROLLBACK of insert(s), even if DDL fails
    ALTER TABLE `users` CHANGE `level` `level` TINYINT(3) UNSIGNED NOT NULL;
    

    推奨される解決策は、DDLとDMLを分離しておく ことです。 。 ドキュメント 言う:

    このような[DDL]ステートメントを含まないように[DML]トランザクションを設計する必要があります。トランザクションの早い段階でロールバックできないステートメントを発行し、後で別のステートメントが失敗した場合、そのような場合、ROLLBACKステートメントを発行してトランザクションの効果を完全にロールバックすることはできません。




    1. phpMyAdminを使用したデータベースとテーブルのインポート

    2. 複数の結合テーブルMySQLから個別の最大値を選択する方法

    3. phpMyAdminを介してmySQLで行うすべてのことで一定の#1064エラー

    4. [送信]をクリックするたびにリストアイテムを追加します