当其中一个引发错误时,如何从处理程序中回滚所有事务语句?
Posted
技术标签:
【中文标题】当其中一个引发错误时,如何从处理程序中回滚所有事务语句?【英文标题】:How to rollback all transaction statements from handler when one of them throws an error? 【发布时间】:2019-07-23 07:47:59 【问题描述】:我有以下 SQL 存储过程:
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
END;
START TRANSACTION;
INSERT INTO users (user_id) VALUES (55556666);
DROP TABLE xaxa;
ROLLBACK;
END
DROP TABLE xaxa;
语句会引发错误,因为这样的 DB 不存在,但是,执行 INSERT 语句并且在 phpmyadmin 中我可以看到插入的用户。
但是,如果我删除麻烦的语句DROP TABLE xaxa;
INSERT
被回滚。
如果可能的话,有人可以帮我从处理程序中回滚插入吗?
【问题讨论】:
【参考方案1】:DROP TABLE 语句不能回滚,它会导致隐式提交。 https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html
【讨论】:
以上是关于当其中一个引发错误时,如何从处理程序中回滚所有事务语句?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用@Async 和@Transactional 在多线程中回滚?