首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InnoDB -回滚连接的所有事务

InnoDB -回滚连接的所有事务
EN

Stack Overflow用户
提问于 2010-04-22 00:48:31
回答 3查看 5.5K关注 0票数 1

是否可以回滚在同一连接线程中执行的所有语句?而不是ROLLBACK,只是恢复最后执行的语句。

EN

回答 3

Stack Overflow用户

发布于 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语句结束当前事务,并启动一个新事务。

如果启用了自动提交,则不能回滚语句,因为提交是隐式的。

票数 2
EN

Stack Overflow用户

发布于 2010-04-22 03:38:30

除了通常的COMMIT和ROLLBACK语句外,InnoDB还支持savepoints。保存点只允许您回滚事务中的几个最后一条语句。

票数 2
EN

Stack Overflow用户

发布于 2010-04-22 00:58:10

首先,您不能回滚事务中不存在的内容-尽管对于大多数dbs,您可以使用自动提交模式,该模式使每个语句都是一个事务。

因此,要获得您想要的,您需要启动一个事务,执行所需的任何处理,然后回滚到开始或提交。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2684865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档