2011-07-09 68 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 ; 
相關問題