2011-11-07 96 views
20

我正在測試innoDB表中的事務支持,而且我試圖在MyIsam表上運行相同的事務,並且令人驚訝的是它工作正常。我假設myIsam表中的查詢是一個接一個地執行的,而不是在一個原子操作中執行,並且我沒有從START TRANSACTION和COMMIT和ROLLBACK操作中得到任何錯誤。我感興趣的是MyIsam引擎是忽略這個操作還是執行一些操作?MyIsam引擎事務支持

+0

閱讀這篇文章「工作」意味着你能回滾DML語句,或者你沒有得到語法錯誤? –

+0

我做了一個簡單的選擇和插入語句,並沒有收到任何錯誤。 – Headshota

+2

好吧,然後看@ Darhazer的答案。您可能不會遇到任何錯誤,但您實際上不會有交易。發出ROLLBACK時,你的INSERT不會被撤銷。 –

回答

26

MyISAM有效地工作在自動提交模式(因爲它不是一個事務引擎),它只是忽略提交/回滾。

實際上,存儲引擎是MySQL體系結構中的一個不同層,與SQL解析器分開,SQL層使用低級API與存儲引擎通信,這就是存在常見SQL和引擎的原因,支持不同特色的子集。你可以看到非常高層次的體系結構here

2

MyIsam tabels不是爲此而構建的。即使在5+版本中也沒有。它只是爲了存儲數據。它不能保證交易或數據恢復。您應該爲此使用InnoDB,並且如果需要的話,使用MyIsam進行復制(由於沒有跨表檢查,因此使用MyIsam表檢索數據會更快)。

您可以從MySQL http://forums.mysql.com/read.php?21,68686,69229#msg-69229