1. ホーム
  2. mysql

MySQL : ストアドプロシージャ内のトランザクション

2023-08-18 05:03:50

質問

ストアドプロシージャの基本構造は以下の通りです。

BEGIN

    .. Declare statements ..

    START TRANSACTION;

        .. Query 1 ..
        .. Query 2 ..
        .. Query 3 ..

    COMMIT;

END

MySQLのバージョンです。 5.1.61-0ubuntu0.11.10.1-log

現在、'query 2'が失敗した場合、'query 1'の結果がコミットされます。

  • クエリのいずれかが失敗した場合、トランザクションをロールバックするにはどうすればよいですか。

どのように解決するのですか?

を見てみましょう。 http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html

基本的には、ロールバックを呼び出すエラーハンドラを宣言します。

START TRANSACTION;

DECLARE EXIT HANDLER FOR SQLEXCEPTION 
    BEGIN
        ROLLBACK;
        EXIT PROCEDURE;
    END;
COMMIT;