MYSQL存儲過程中事務和DECLARE EXIT/CONTINUE HANDLER的使用


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 ;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM