在不使用存储过程的情况下处理交易错误

时间:2020-06-02 14:05:41

标签: mysql transactions mysql-8.0

我正在尝试编写一个用于构建数据库的模板。我希望模板将所有命令包装在事务中,以便在发生任何故障时可以自动回滚。

当前,我正在使用包含以下常规结构的存储过程:

DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;

START TRANSACTION;

    -- Commands here

COMMIT;

但是,这存在一些问题,例如,不可能从存储过程中添加其他存储过程。因此,我希望具有类似的功能,而不必将其包装在存储过程中。这可能吗?我无法找到任何方法来捕获存储过程之外的SQL异常,否则我将无法自动回滚错误。

我也尝试过类似的方法,希望在执行错误时,应该在不提交的情况下崩溃到第一部分,然后继续进行下一个回滚。但这似乎不起作用:

DELIMITER //

START TRANSACTION;

    -- Commands here

COMMIT//

ROLLBACK//

DELIMITER ;

0 个答案:

没有答案