我正在尝试编写一个用于构建数据库的模板。我希望模板将所有命令包装在事务中,以便在发生任何故障时可以自动回滚。
当前,我正在使用包含以下常规结构的存储过程:
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 ;