【问题标题】: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 被回滚。 如果可能的话,有人可以帮我从处理程序中回滚插入吗?

【问题讨论】:

    标签: mysql sql stored-procedures handler


    【解决方案1】:

    DROP TABLE 语句不能回滚,它会导致隐式提交。 https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 2016-03-05
      • 1970-01-01
      • 2011-03-18
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多