0
我有在MySQL數據庫InnoDB引擎(評論)的表,我有以下情形:瞭解InnoDB和它的隔離級別和鎖定
有兩個用戶試圖在同一訪問相同的意見表時間如下:
USER1:
INSERT INTO comments (comment) VALUES ('HELLO WORLD');
用戶2:
SELECT * FROM comments;
我要澄清以下幾點,請:
- 用戶2無法從表中讀取(SELECT),應該等待一段時間(我認爲,直到用戶user1的插件finihshed)。 這是否等待被InnoDB使用的行級鎖定?
- 如果上一個問題的答案是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;
最大的問題是怎麼可能我的用戶,而其他用戶插入或更新行讀?
沒有。如果插入另一行,innodb沒有理由鎖定表格進行讀取。只需在2個不同的終端打開2個連接並運行你的場景 – zerkms
我試過了,它不起作用,我問這個問題 – Basel
什麼「沒有工作」是什麼意思? – zerkms