2011-03-13 68 views
3

以下查詢MySQL-InnoDb智能鎖?

SELECT * FROM (SELECT * FROM Users) WHERE Id = 1 

SELECT * FROM Users Where Id = 1 

是等價的。但根據文檔,在可序列化模式下,所有選擇均在鎖定共享模式下進行。這是否意味着在第一個示例中,整個用戶表將被鎖定在共享模式下?

+1

你爲什麼不嘗試呢?打開兩個不同的連接,啓動兩個事務並檢查結果。 – 2011-03-13 08:53:00

+0

如何檢查有讀鎖的記錄? – SiberianGuy 2011-03-13 11:04:02

+0

也指定使用的存儲引擎 – Andreas 2011-03-13 12:00:53

回答

1

我想你是誤解了共享模式鎖的概念。從MySQL documentation

SELECT ... LOCK IN SHARE MODE設置上讀取行的 共享模式鎖。 A 共享模式鎖定使其他 會話可以讀取行,但不會對 進行修改。

所以可以有併發讀取。只有修改將被延遲,直到您的查詢得到執行。