2017-08-29 51 views
1

假設我有一個有兩列的表。一個被命名爲id,這是它的主鍵。另一個叫做value。該表格有10行,如下所示。當我選擇更新的開始和結束行時,mysql會鎖定一系列行嗎?

1 'A' 
2 'B' 
3 'C' 
4 'D' 
5 'E' 
6 'F' 
7 'G' 
8 'H' 
9 'I' 
10 'J' 

然後我申請這樣SELECT * FROM table WHERE id IN (1, 10) FOR UPDATE;我想知道在這之後會發生什麼的查詢。我記得有一次,我從博客讀取它會鎖定所有10行。但我不能重複這一點。這個問題確實存在嗎?或者這只是我誤解了。

+1

像往常一樣,簡單的手冊看看有助於:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html而且一個建議,不要依賴博主。他們中的一些人沒有真正深入研究過的話題,只是爲了獲得一些名氣(我猜)。我在博客中經常發現錯誤或過時的信息。另一方面,該手冊很少有錯誤。 – fancyPants

回答

0

大多數DBMS的默認隔離級別是你有以下問題提交讀, 所以如果不採取反制措施:

  • 非repeteable讀取
    和作爲一個後果:
    • 丟失更新
    • 讀取歪斜
    • 寫歪斜
    • 幻讀

幻象讀現象就是你擔心在這種情況下, 這意味着,如果,例如,使用完全相同的where子句在稍後的事務更新聲明中,您可能會影響更多/更少或完全不同的一組行。

相關問題