错误 1305 (42000):保存点...不存在

uth*_*mas 4 mysql savepoints

我的 MYSQL 数据库中有这个 SQL(存储过程为空,所以我猜没有隐式提交?)。

DROP PROCEDURE IF EXISTS doOrder;

DELIMITER $$

CREATE PROCEDURE doOrder(IN orderUUID VARCHAR(40))
  BEGIN
    SAVEPOINT sp_doOrder;

    BEGIN
      DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK TO sp_doOrder;

      -- doing my updates and selects here...

    END;

    RELEASE SAVEPOINT sp_doOrder;
  END $$

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

当我

call doOrder('some-unique-id');
Run Code Online (Sandbox Code Playgroud)

我得到:错误 1305 (42000): SAVEPOINT sp_doOrder 不存在。

我可能会忽略一些事情......有什么想法吗?

Bar*_*art 6

由于这是搜索“保存点不存在”时 Google 上的最佳答案,因此我也会在此处添加我的解决方案。

TRUNCATE在事务中执行的代码中有一条语句,这导致了隐式提交,从而结束了事务。在事务之外创建保存点不会导致错误,只是不会被执行。这意味着您第一次注意到错误是当您尝试释放保存点/回滚它时。

这是导致隐式提交的语句的完整列表:https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html