何為間隙鎖

2021-08-25 06:16:08 字數 343 閱讀 3810

在mysql的innodb儲存引擎中,如果更新操作是針對乙個區間的,那麼它會鎖住這個區間內所有的記錄,比如update *** where id between a and b那麼它會鎖住a到b之間所有記錄,注意是所有記錄,甚至這個記錄並不存在也會被鎖住,這個時候,如果另外乙個連線需要插入一條記錄到a到b之間,那麼它就必須等到上乙個事務結束。

典型的例子就是使用auto_increment id,由於這個id是一直往上分配的,因此兩個事務都insert時,會得到兩個不同的,但是這兩條記錄還沒有被提交,因此也就不存在,如果這個時候有乙個事務進行範圍操作,而且恰好要鎖住不存在的,就是觸發間隙鎖問題。

結論,mysql中盡量不要使用區間更新。

mysql間隙鎖 mysql間隙鎖

前面一文 mysql鎖 介紹了mysql innodb儲存引擎的各種鎖,本文介紹一下innodb儲存引擎的間隙鎖,就以下問題展開討論 1.什麼是間隙鎖?間隙鎖是怎樣產生的?2.間隙鎖有什麼作用?3.使用間隙鎖有什麼隱患?一 間隙鎖的基本概念 1.什麼叫間隙鎖 當我們用範圍條件而不是相等條件檢索資料,...

mysql 間隙鎖 mysql間隙鎖 轉

前面一文 mysql鎖 介紹了mysql innodb儲存引擎的各種鎖,本文介紹一下innodb儲存引擎的間隙鎖,就以下問題展開討論 1.什麼是間隙鎖?間隙鎖是怎樣產生的?2.間隙鎖有什麼作用?3.使用間隙鎖有什麼隱患?一 間隙鎖的基本概念 1.什麼叫間隙鎖 當我們用範圍條件而不是相等條件檢索資料,...

mysql間隙鎖 mysql的間隙鎖

最近學習了mysql的各種鎖,有點暈,打算通過文章的方式捋一捋。在學習了mvcc後,我就想,他已經很好的解決了併發讀寫了,但我也知道innodb提供了多種型別的鎖,所以很好奇這些鎖有什麼用,為什麼這些鎖的功能是mvcc做不到的?本文討論的都是rr級別下的鎖 我先建立乙個表,並插入幾行資料,如下圖 插...