2013-11-25 56 views
0

我有在MySQL數據庫InnoDB引擎(評論)的表,我有以下情形:瞭解InnoDB和它的隔離級別和鎖定

有兩個用戶試圖在同一訪問相同的意見表時間如下:

USER1:

INSERT INTO comments (comment) VALUES ('HELLO WORLD'); 

用戶2:

SELECT * FROM comments; 

我要澄清以下幾點,請:

  1. 用戶2無法從表中讀取(SELECT),應該等待一段時間(我認爲,直到用戶user1的插件finihshed)。 這是否等待被InnoDB使用的行級鎖定?
  2. 如果上一個問題的答案是YES,那麼MVCC的工作是什麼? InnoDB引擎中的。我讀到MVCC意味着讓用戶讀取表格行(可重複讀取),即使同時存在更新或插入情況(因爲用戶在這裏讀取舊版本的行,即使它正在更新與此同時)。

注:

  • 我想提一提,我用上面的代碼下面的形式,但它仍然使同樣的問題(等問題):

USER1:

SET AUTOCOMMIT=0; 
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 
INSERT INTO comments (comment) VALUES ('HELLO WORLD'); 
COMMIT; 

user2:

SELECT * FROM comments; 
  • 我甚至嘗試將隔離級別從可重複讀取改爲讀取uncommited-dirty read對我來說不是那麼重要 - (我認爲它會解決等待的問題,但它沒有。等待仍然站着)。

USER1:

SET AUTOCOMMIT=0; 
START TRANSACTION; 
INSERT INTO comments (comment) VALUES ('HELLO WORLD'); 
COMMIT; 

用戶2:

SELECT * FROM comments; 

最大的問題是怎麼可能我的用戶,而其他用戶插入或更新行讀?

+0

沒有。如果插入另一行,innodb沒有理由鎖定表格進行讀取。只需在2個不同的終端打開2個連接並運行你的場景 – zerkms

+0

我試過了,它不起作用,我問這個問題 – Basel

+0

什麼「沒有工作」是什麼意思? – zerkms

回答