mysql存储过程的事务

现有一张表aaa,信息如下:

存储过程tx_demo如下:

DELIMITER $$

CREATE
    PROCEDURE `my_data`.`tx_demo`()
    BEGIN
	INSERT INTO aaa (NAME)VALUES('zhangsan');
	INSERT INTO aaa (NAME,pwd)VALUES('zhangsan','123456');
    END$$
DELIMITER ;

第二句SQL明显会执行错误,在执行call tx_demo()以后表内多了一行zhangsan的记录,并没有事务控制,现在加入事务控制如下:

DELIMITER $$

CREATE
    PROCEDURE `my_data`.`tx_demo2`()
    BEGIN
	#事务标识
	DECLARE t_error INTEGER DEFAULT 0;
	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
        START TRANSACTION;
	INSERT INTO aaa (NAME)VALUES('zhangsan');
	INSERT INTO aaa (NAME,pwd)VALUES('zhangsan','123456');
IF 
	t_error = 1 
THEN
	#失败回滚。
	ROLLBACK;
ELSE
	#成功提交。
        COMMIT;
END IF;
    END$$
DELIMITER ;
发布了93 篇原创文章 · 获赞 83 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_39706570/article/details/101193265