2016-09-23 60 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被忽略。我認爲這是「最佳實踐」