MYSQL存储过程中事务和DECLARE EXIT/CONTINUE HANDLER的使用

时间:2023-03-09 14:36:47
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的记录写入到数据库中。

DROP PROCEDURE IF EXISTS p_test;
delimiter //
CREATE PROCEDURE p_test(OUT v_succ tinyint)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET v_succ=0;
ROLLBACK;
END;
SET v_succ=1;
START TRANSACTION;
  INSERT INTO tb_test (id) VALUES (1);
  SIGNAL SQLSTATE '45001' SET MYSQL_ERRNO=2000,MESSAGE_TEXT='故意触发异常';
  INSERT INTO tb_test (id) VALUES (2);
COMMIT;
END;//
delimiter ;