是否可以回滚在同一连接线程中执行的所有语句?而不是ROLLBACK只是恢复最后执行的语句。
答案 0 :(得分:2)
取决于 autocommit ,默认情况下,每个连接都会被禁用。来自MySql Manual
在InnoDB中,所有用户活动都发生在事务中。如果启用了自动提交模式,则每个SQL语句自己形成一个事务。默认情况下,MySQL为启用了自动提交的每个新连接启动会话,因此如果该语句没有返回错误,MySQL会在每个SQL语句后执行提交。如果语句返回错误,则提交或回滚行为取决于错误。请参见第13.2.12节“InnoDB错误处理”。
启用了自动提交的会话可以通过使用显式START TRANSACTION或BEGIN语句启动它并使用COMMIT或ROLLBACK语句结束它来执行多语句事务。
在SET autocommit = 0的会话中禁用自动提交模式,会话始终打开一个事务。 COMMIT或ROLLBACK语句结束当前事务并启动新事务。
如果启用了 autocommit ,则无法回滚语句,因为 commit 是隐式的。
答案 1 :(得分:2)
除了通常的COMMIT和ROLLBACK语句,InnoDB支持savepoints。保存点允许您仅回滚事务中的几个最后语句。
答案 2 :(得分:1)
您无法回滚事务中不在事务中的事物 - 尽管对于大多数dbs,您可以使用自动提交模式,这使得每个语句都成为事务。
所以为了获得你想要的东西,你需要启动一个事务,做你需要的任何处理,然后回滚到开始或提交。