是否可以回滚在同一连接线程中执行的所有语句?而不是ROLLBACK,只是恢复最后执行的语句。
发布于 2010-04-22 01:03:03
依赖于自动提交,默认情况下,每个连接都禁用自动提交。从MySql Manual
在InnoDB中,所有用户活动都发生在事务内部。如果启用了自动提交模式,则每条SQL语句将单独形成一个事务。默认情况下,MySQL在启用自动提交的情况下为每个新连接启动会话,因此,如果每条语句没有返回错误,MySQL就会在该语句之后执行commit。如果语句返回错误,则提交或回滚行为取决于错误。请参阅第13.2.12节“InnoDB错误处理”。
启用了自动提交的会话可以执行多语句事务,方法是用显式的START transaction或BEGIN语句启动它,然后用COMMIT或ROLLBACK语句结束它。
在SET autocommit = 0的会话中禁用自动提交模式,该会话始终有打开的事务。COMMIT或ROLLBACK语句结束当前事务,并启动一个新事务。
如果启用了自动提交,则不能回滚语句,因为提交是隐式的。
发布于 2010-04-22 03:38:30
除了通常的COMMIT和ROLLBACK语句外,InnoDB还支持savepoints。保存点只允许您回滚事务中的几个最后一条语句。
发布于 2010-04-22 00:58:10
首先,您不能回滚事务中不存在的内容-尽管对于大多数dbs,您可以使用自动提交模式,该模式使每个语句都是一个事务。
因此,要获得您想要的,您需要启动一个事务,执行所需的任何处理,然后回滚到开始或提交。
https://stackoverflow.com/questions/2684865
复制相似问题