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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-23 03:24:10225ブラウズ

How to Automatically Roll Back MySQL Transactions on Exceptions?

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

一連の MySQL コマンドを実行する場合、データの整合性を確保するためにエラーを処理することが重要です。これを実現する 1 つの方法は、コマンドで例外が発生した場合にトランザクション全体を自動的にロールバックすることです。

自動ロールバックを設定するには、DECLARE ... HANDLER 構文を利用します。

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 ;

このプロシージャは、SQL 例外が発生した場合に _rollback フラグを 1 に設定するハンドラ (CONTINUE HANDLER FOR SQLEXCEPTION) を定義します。トランザクション内の個々のコマンドを実行した後、_rollback フラグをチェックして、トランザクションをロールバックするかコミットするかを決定します。

この手法を実装すると、コマンドの実行中に例外が発生すると、トランザクション全体がロールされます。部分的な変更がデータベースに適用されないようにします。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。