站長資訊網
最全最豐富的資訊網站

MySQL學習之聊聊InnoDB中鎖的情況

本篇文章帶大家聊聊MySQL,介紹一下InnoDB中鎖的情況。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

MySQL學習之聊聊InnoDB中鎖的情況

mysql> select @@version; +-----------+ | @@version | +-----------+ | 5.7.21    | +-----------+ 1 row in set (0.01 sec)

一,鎖的基本介紹

相對其他數據庫而言,MySQL的鎖機制比較簡單,其最顯著的特點是不同的存儲引擎支持不同的鎖機制。比如,MyISAM和MEMORY存儲引擎采用的是表級鎖(table-level locking);InnoDB存儲引擎既支持行級鎖(row-level locking),也支持表級鎖,但默認情況下是采用行級鎖。

表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖沖突的概率最高,并發度最低。

行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高。

行級鎖類型:

Record Lock(記錄鎖):當個記錄的鎖(鎖住單條記錄)

記錄鎖只會鎖住索引的記錄,如果InnoDB存儲表在建立的時候沒有任何索引,那么這個鎖會使用隱式的主鍵來進行鎖定,如下圖

MySQL學習之聊聊InnoDB中鎖的情況

Gap Lock(間隙鎖):鎖定一個范圍,不包括記錄本身(只鎖數據前面的GAP)

如下圖為的鎖就是GAP鎖,就是不允許其他事務在索引列8之前的間隙插入新的記錄,也就是(3 , 8)這個區間。gap鎖 的作用僅僅是為了防止插入幻影記錄的而已

MySQL學習之聊聊InnoDB中鎖的情況

Next-Key Lock(臨鍵鎖):同時鎖住記錄和記錄前面的GAP,也就是Next-Key Lock = Record Lock + Gap Lock。

MySQL學習之聊聊InnoDB中鎖的情況

二,鎖的分類

共享鎖 Share Locks (簡稱S鎖,屬于行鎖)

排它鎖 Exclusive Locks (簡稱X鎖,屬于行鎖)

意向共享鎖 Intention Share Locks (簡稱IS鎖,屬于表鎖)

意向排它鎖 Intention Exclusive Locks (簡稱IX鎖,屬于表鎖)

自增鎖 AUTO-INC Locks(屬于表鎖)

下面具體介紹下每種類型的鎖,我們先建一張innodb的表,sql如下

create table tab_with_index(id int,name varchar(10)) engine=innodb; alter table tab_with_index add index id(id); insert into tab_with_index values(1,'1'),(2,'2'),(3,'3'),(4,'4');

共享鎖

共享鎖就是多個事務對于同一個數據可以共享一把鎖,都能訪問數據庫,但是只能讀不能修改;

事務A:

select * from tab_with_index lock in share mode;

事務B:

select * from tab_with_index where id =1; // 可以查詢數據

update tab_with_index set name = 'aa' where id = 1 ;

注意:這里的修改語句會堵塞住,直到事務A提交之后才能操作成功。

排它鎖

排它鎖不能與其他鎖并存,如一個事務獲取了一個數據行的排它鎖,其他事務就不能在獲取該行的鎖,只有當前獲取排它鎖的事務可以對數據進行修改。(delete,update,create默認是排它鎖)

事務A:

select * from tab_with_index where id =1 for update;

事務B:

select * from tab_with_index where id =1; //可以獲取結果

select * from tab_with_index where id =1 for update; // 堵塞

select * from tab_with_index where id = 1 lock for share mode; // 堵塞

注意:事務B兩個sql都會堵塞住,也就是獲取不到共享鎖也獲取不到排它鎖,直到事務A提交之后才能操作成功。

意向共享鎖和意向排它鎖

意向共享鎖:表示事務準備給數據行加入共享鎖,也就是說一個數據行在加共享鎖之前必須先獲取該表的IS鎖。

意向排它鎖:表示事務準備給數據行加入排它鎖,也就是說一個數據行加排它鎖之前必須先獲取該表的IX鎖。

IS鎖和IX鎖是表級鎖,他們的提出僅僅為了在之后加表級別的S鎖和X鎖時可以快速判斷表中的記錄是否被上鎖,以避免用遍歷的方式來查看表中有沒有上鎖的記錄,也就是說其實IS鎖和IX鎖是兼容的,IX鎖和IX鎖是兼容的。 《MySQL是怎樣運行的》

自增鎖

針對自增列自增長的一個特殊的表級別鎖。

show variables like 'innodb_autoinc_lock_mode';  -- 默認值1,代表連續,事務未提交則ID永久丟失

MySQL學習之聊聊InnoDB中鎖的情況

三,InnoDB鎖

1、事務及其ACID屬性

事務是由一組SQL語句組成的邏輯處理單元,事務具有4屬性,通常稱為事務的ACID屬性。

原子性(Actomicity):事務是一個原子操作單元,其對數據的修改,要么全都執行,要么全都不執行。 一致性(Consistent):在事務開始和完成時,數據都必須保持一致狀態。 隔離性(Isolation):數據庫系統提供一定的隔離機制,保證事務在不受外部并發操作影響的“獨立”環境執行。 持久性(Durable):事務完成之后,它對于數據的修改是永久性的,即使出現系統故障也能夠保持。

2、并發事務帶來的問題

相對于串行處理來說,并發事務處理能大大增加數據庫資源的利用率,提高數據庫系統的事務吞吐量,從而可以支持

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国产在线精品无码二区| 日韩少妇无码喷潮系列一二三| 亚洲∧v久久久无码精品| 网友偷拍日韩精品| 中文字幕日韩有码| 亚洲精品岛国片在线观看| 成人国产激情福利久久精品| 中文字幕精品无码亚洲字| 日韩毛片一级好特黄| 国产精品午夜无码体验区| 国产精品一在线观看| 一本久久a久久精品综合夜夜| 日韩美女18网站久久精品| 日韩亚洲国产二区| 国产精品嫩草影院永久一| 国产精品自在在线午夜| 国产精品国产亚洲区艳妇糸列短篇| 国美女福利视频午夜精品| 精品久久久久中文字幕日本| 久久精品国产日本波多野结衣| 2021成人国产精品| 久久亚洲精品成人无码网站| 久久久无码精品亚洲日韩京东传媒| 精品无码一区二区三区爱欲九九| 97麻豆精品国产自产在线观看| 乱色精品无码一区二区国产盗 | 国产麻豆精品久久一二三 | 久久久999久久久精品| 久久精品国产99精品国产2021 | 久久久免费的精品| 久久国产精品范冰啊| 久久久久人妻精品一区蜜桃| 四虎国产精品永久在线| 久久夜色精品国产网站| 久久精品国产亚洲AV无码麻豆 | 四虎国产精品免费久久| 精品videossexfreeohdbbw| 日本精品高清一区二区2021| 国产伦精品一区二区三区无广告| 国产日韩高清一区二区三区 | 99视频精品全部在线播放|