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 ;

 

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