MySql執行異常處理、MySql事務回滾和提交,判斷有異常則回滾。

示例

DELIMITER $$
DROP PROCEDURE IF EXISTS sp_test1 $$
CREATE PROCEDURE sp_test1()
top:BEGIN
  -- 錯誤標記,當sql執行出錯的時候,設置標記等於1。
    DECLARE _err INT DEFAULT 0;
    -- 錯誤標記處理,放到最後再聲明,要放到遊標後面。
    -- 不然會報錯:Variable or condition declaration after cursor or handler declaration
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1;
    
    -- 開始事務
    START TRANSACTION;
    
    -- 執行任意sql語句,如果執行的sql語句任何一個發生異常(比如主鍵重複),則_err都會被設置爲1。
    INSERT INTO stu(id,first_name,birth)SELECT 1,'a',NOW();
    
    -- 判斷異常狀態,回滾和提交。
    IF(_err = 1) 
    THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
    
END $$
DELIMITER ;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章