MySQL_MySQL鎖機制之間隙鎖

1.引入

   我們接下來的話針對一種比較特殊的數據記錄來進行一個操作,那麼就是如果在一個情況下,要求我們的數據記錄是連續的。那麼當我們的數據出現了缺失,也就是產生了間隙。那麼這一個時候又會出現什麼樣子的問題呢?,我們一起來看看。

 

2.什麼是間隙鎖

   當我們使用範圍條件而不是相等條件檢索數據。並請求共享或排他鎖的時候,InnoDB會給符合條件的已有數據記錄的索引項添加鎖;對於鍵值範圍內但是並不存在的記錄,叫間隙(gap)。InnoDB也會對這一個"間隙"添加鎖。這一種鎖機制就是所謂的間隙鎖(Next-key鎖)。

 

3.間隙鎖案例測試

(1).創建測試數據庫表

DROP TABLE IF EXISTS `boys`;
CREATE TABLE `boys` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `boyName` varchar(20) DEFAULT NULL,
  `userCP` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

(2).添加數據內容並查看結果

(3).關閉數據的自動提交,測試的倆個會話都關閉自動提交

set autocommit = 0;

(4).創建倆個會話,然後測試

 

會話1進行對數據庫表boys範圍性的修改修改操作,能夠正常的執行

會話2進行對數據庫表boys進行單點的修改,發現處於阻塞狀態,當會話1進行提交以後,會話2操作才被執行。

這個就是間隙鎖的危害。

 

4.間隙鎖的危害

   因爲Query在執行的過程中通過範圍的查找的話,它會鎖定整個範圍以內所有的索引鍵值,即便是這一個鍵值不存在。間隙鎖有一個比較致命的弱點,就是當鎖定一個範圍鍵值以後,在這一個範圍以內的所有鍵值都會被無辜的鎖定,而造成鎖定的 時候就無法插入鎖定的鍵值範圍以內的任何數據。在某一些場合下回造成很大的危害。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章