2010-04-21 24 views

回答

1

您不能回滚事务中不属于事务的东西 - 尽管对于大多数dbs,您可以拥有使每个语句成为事务的自动提交模式。为了得到你想要的东西,你需要启动一个事务,做任何你需要的处理,然后回滚到开始或者提交。

2

取决于自动提交默认情况下,对于每个连接禁用。来自MySql Manual

在InnoDB中,所有的用户活动都发生在一个事务中。如果启用自动提交模式,则每个SQL语句将自行形成一个事务。默认情况下,MySQL为启用自动提交的每个新连接启动会话,因此如果该语句没有返回错误,则MySQL会在每个SQL语句后执行提交。如果语句返回错误,则提交或回滚行为取决于错误。请参见第13.2.12节“InnoDB错误处理”。

启用自动提交的会话可以通过以明确的START TRANSACTION或BEGIN语句启动并以COMMIT或ROLLBACK语句结束来执行多语句事务。

自动提交模式在SET autocommit = 0的会话中被禁用,会话始终打开一个事务。 COMMIT或ROLLBACK语句结束当前事务并开始一个新事务。

如果作为提交是隐含自动提交启用你不能ROLLBACK语句。

2

除了通常的COMMIT和ROLLBACK语句,InnoDB支持savepoints。保存点允许您仅回滚事务内的最后几条语句。