2011-07-09 9 views

答えて

4

トリガーが例外を発生させると、トランザクションが中断され、効果的にロールバックされます。これはあなたのために働くでしょうか?

3

から:http://dev.mysql.com/doc/refman/5.1/en/trigger-syntax.html

トリガー、 は、明示的または暗黙的なSTART TRANSACTION ようにトランザクションを開始または終了 というステートメントを使用COMMIT、またはROLLBACKすることはできません。トランザクションテーブルの場合

、 文の失敗は、ステートメントによって実行されたすべての の変更のロールバックが発生する必要があります。 トリガーに失敗すると ステートメントが失敗するため、トリガーエラー もロールバックを引き起こします。 非トランザクションテーブルの場合、ロールバック は実行できません。したがって、 ステートメントは失敗しますが、エラーの時点より前に で実行された変更はすべて のままです。

7

この機能はMySQL 5.5以降に存在し、以前のリリースでは機能しないことがわかりました。

トリガーはロールバックもコミットも行いません。 ロールバックを開始するには、例外を発生させる必要があります。したがって、挿入/更新/削除コマンドは中止されます。 SQLコマンドを使用してロールバックまたはコミットアクションを発生させる必要があります。あなたXXXのトリガーで、あなたの例外を発生させる

(例えば。):

create trigger Trigger_XXX_BeforeInsert before insert on XXX 
for each row begin 

    if [Test] 
    then 

     SIGNAL sqlstate '45001' set message_text = "No way ! You cannot do this !"; 

    end if ; 

end ; 
関連する問題