对于使用事务的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
答案 0 :(得分:2)
这是必要的,因为交易仍未结束,因为您尚未结束交易。任何隐式提交事务的东西(例如,启动一个新事务)都会像你运行COMMIT一样,这与你想要的相反
编辑对于存储过程可能有所不同,因为这通常会在完成时杀死所有引用它的内容,但是安全总是比抱歉更好。此外,明确地杀死它会使事情更容易理解。