提前退出MySQL存储过程时是否需要调用ROLLBACK?

时间:2013-12-22 06:10:29

标签: mysql stored-procedures transactions exit rollback

对于使用事务的MySQL存储过程,是否需要在退出时调用ROLLBACK?

CREATE PROCEDURE `Proc`(IN `param` VARCHAR(10))
sp:BEGIN
    START TRANSACTION;
    IF ( bad condition ) THEN
        ROLLBACK;     /* is this necessary? */
        LEAVE sp;
    END IF;
    ...
    COMMIT;
END

1 个答案:

答案 0 :(得分:2)

这是必要的,因为交易仍未结束,因为您尚未结束交易。任何隐式提交事务的东西(例如,启动一个新事务)都会像你运行COMMIT一样,这与你想要的相反

编辑对于存储过程可能有所不同,因为这通常会在完成时杀死所有引用它的内容,但是安全总是比抱歉更好。此外,明确地杀死它会使事情更容易理解。