ホームページ > データベース > mysql チュートリアル > MySQL トランザクションの例外に対する自動ロールバックを実装するにはどうすればよいですか?

MySQL トランザクションの例外に対する自動ロールバックを実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-07 06:48:11
オリジナル
209 人が閲覧しました

How Can I Implement Automated Rollback on Exceptions in MySQL Transactions?

MySQL トランザクション処理: 例外時のロールバック

MySQL のコンテキストでは、トランザクションには、トランザクションとして実行される一連のデータベース操作が含まれます。単一の論理ユニット。デフォルトでは、トランザクション内のコマンドのいずれかでエラーがスローされた場合、トランザクション全体がロールバックされ、データの整合性が確保されます。ただし、ロールバック動作を明示的に制御したい場合があります。

例外で自動ロールバックを実現する 1 つの方法は、MySQL の DECLARE ... HANDLER 構文を使用することです。これにより、ユーザーは、トランザクションの実行中に SQLEXCEPTION が発生した場合に実行されるハンドラー関数を指定できます。

これがどのように機能するかを示すために、次の例を考えてみましょう。

DELIMITER $$

CREATE PROCEDURE `sp_fail`()
BEGIN
    DECLARE `_rollback` BOOL DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
    START TRANSACTION;
    INSERT INTO `tablea` (`date`) VALUES (NOW());
    INSERT INTO `tableb` (`date`) VALUES (NOW());
    INSERT INTO `tablec` (`date`) VALUES (NOW()); -- FAIL
    IF `_rollback` THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
END$$

DELIMITER ;
ログイン後にコピー

このプロシージャでは、エラーが発生した場合にフラグを立てる変数 _rollback を宣言します。ハンドラーは、SQLEXCEPTION が発生したときにこのフラグを 1 に設定するように定義されています。次に、トランザクション内で必要なデータベース操作を実行します。すべての操作が試行された後、_rollback フラグをチェックし、エラーが発生した場合にのみ ROLLBACK を発行します。それ以外の場合は、トランザクションを COMMIT します。

この手法を使用すると、トランザクション レベルのエラーが発生した場合にロールバックがトリガーされ、データベースを一貫した状態に保つという望ましい動作が維持されます。

以上がMySQL トランザクションの例外に対する自動ロールバックを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート