1、DECLARE EXIT HANDLER FOR SQLEXCEPTION 語句后面可以跟一個 begin end的復合語句塊,也可以直接跟一個簡單語句例如 :DECLARE EXIT HANDLER FOR SQLEXCEPTION v_succ=0;
2、EXIT會在執行異常后執行執行 FOR SQLEXCEPTION 后的語句或塊而整個停止下來;CONTINUE選項會在異常后繼續執行,從而將id為2的記錄寫入到數據庫中。
3、事務中請不要使用 create table等會執行隱式事務提交的命令,否則在會導致隱式提交事務,而不會回滾操作。
DROP PROCEDURE IF EXISTS p_test; delimiter // CREATE PROCEDURE p_test(OUT v_succ tinyint) BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN -- 這里可以用語句塊,也可以直接一個語句 ROLLBACK; END; SET v_succ=0; START TRANSACTION; -- 如果這里寫入 insert語句,然后又執行了create table語句,那么回滾事務只能對create table以后的語句生效 INSERT INTO tb_test (id) VALUES (1); SIGNAL SQLSTATE '45001' SET MYSQL_ERRNO=2000,MESSAGE_TEXT='故意觸發異常'; INSERT INTO tb_test (id) VALUES (2); COMMIT; SET v_succ=1; END;// delimiter ;