2016-09-23 34 views
-1

我是一位正在学习事务的MySQL新手,我正在使用InnoDB引擎。我看到他们要求在开始一个事务之前将autocommit设置为0,但是在两种方式中(将它设置为0或1),我看到了相同的行为:事务在提交后被验证并通过回滚无效。将autocommit设置为0还是1,有什么区别?InnoDB中的MySQL事务

回答

1

如果自动提交,那么每当你有效地发出查询的运行是这样的:

start transaction; 
...do a query ... 
commit; 
start transaction; 
... do another query ... 
commit 
etc... 

自动提交了,有没有自动交易,你自己启动它,这使得代码的运行是这样的:

start transaction 
...do a query ... 
...do another query ... 
... etc... 
commit; 

如果您只发出单一命令查询,那么行为没有太大区别。当你开始发出多个连续的查询,新的行为真的踢它的唯一。

+0

我有这样的疑问: 开始交易 ......做一个查询... ... 做另一个查询... ... 等.. 承诺; 我只想知道在开始事务之前将自动提交设置为0或1之间的区别。 –

0

我认为,如果你使用MyISAM存储引擎,因为开始交易将自动提交到0 LINK

必须设置自动提交到0,但有没有必要的InnoDB的整数
+3

myisam没有事务处理期限,所以自动提交被忽略 –

+0

MyISAM不关心很多事情,比如数据完整性,性能或者最重要的事务。 – tadman

0

有3种模式:

  • autocommit=1(或ON):每个语句是一个事务。 (见Marc的回答)

  • autocommit=0(或OFF):您最终必须发出COMMIT,否则更改将会丢失。 (我看到这个模式太容易出错用不完。)

  • BEGIN(或START TRANSACTION)... COMMIT(或ROLLBACK):这明确地阐明了交易的程度。 autocommit被忽略。我认为这是“最佳实践”