成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

美團一面:能不能通俗的解釋下為什么要有意向鎖這個東西?

數據庫 MySQL
在意向鎖存在的情況下,事務 A 如果想申請行級讀鎖,就必須先申請該表的意向讀鎖,申請成功后才能繼續申請某行記錄的行級讀鎖。

眾所周知,InnoDB 中既有讀鎖也有寫鎖,也稱為共享鎖和排他鎖,這兩種鎖既可以加在整張表上,也可以加在行上。

MySQL 自身就提供了表鎖的能力:

  • 讀鎖:LOCK TABLE table_name READ 用讀鎖鎖表,會阻塞其他事務的寫操作
  • 寫鎖:LOCK TABLE table_name WRITE 用寫鎖鎖表,會阻塞其他事務的讀和寫操作

行鎖是 InnoDB 存儲引擎提供的,MySQL 本身并不提供行級鎖的能力:

  • 讀鎖,如SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 加行級讀鎖,會阻塞其他事務對該行記錄的寫操作
  • 寫鎖,如SELECT * FROM table_name WHERE ... FOR UPDATE 加行級寫鎖,會阻塞其他事務對該行記錄的的讀和寫操作

又有表鎖又有行鎖,我們來考慮下這兩種類型的鎖共存的問題。看下面這個例子:

事務 A 加了行級讀鎖,鎖住了表中的一行,讓這一行只能讀,不能寫。

之后,事務 B 嘗試申請整個表的寫鎖。

圖片

如果事務 B 申請成功,那么理論上它就能修改表中的任意一行,這與 A 持有的行級讀鎖是沖突的。

數據庫需要避免這種沖突,就勢必要讓 B 的申請被阻塞,直到 A 釋放行級讀鎖。

那數據庫要怎么判斷這個沖突呢?

  • 步驟 1:判斷表是否已被其他事務用表級鎖鎖住了整張表
  • 步驟 2:判斷表中的每一行是否已被行級鎖鎖住

看起來沒有什么困難的,但請注意步驟 2,判斷表中的每一行,各位,如何判斷?

顯然,需要遍歷!遍歷表中的每一行。

小學生都能想到這樣的判斷方法效率實在太過于低下了。

于是就有了意向鎖!

我們先來看下意向鎖的解釋:

Intention locks are table-level locks that indicate which type of lock (shared or exclusive) a transaction requires later for a row in a table.

意向鎖是一個表級鎖,其作用就是指明接下來的事務將會用到哪種鎖。

有兩種意向鎖:

  • 意向共享鎖/讀鎖(IS Lock):當事務想要獲得一張表中某幾行的讀鎖(行級讀鎖)時,InnoDB 存儲引擎會自動地先獲取該表的意向讀鎖(表級鎖)
  • 意向排他鎖/寫鎖(IX Lock):當事務想要獲得一張表中某幾行的寫鎖(行級寫鎖)時,InnoDB 存儲引擎會自動地先獲取該表的意向寫鎖(表級鎖)

注意這里的自動:申請意向鎖的動作是數據庫完成的,就是說,事務 A 申請一行的行鎖的時候,數據庫會自動先開始申請表的意向鎖,不需要我們程序員使用代碼來申請。

在意向鎖存在的情況下,事務 A 如果想申請行級讀鎖,就必須先申請該表的意向讀鎖,申請成功后才能繼續申請某行記錄的行級讀鎖。

在意向鎖存在的情況下,上面的判斷可以改成:

  • 步驟 1(不變):判斷表是否已被其他事務用表級鎖鎖住了整張表
  • 步驟 2:發現表上有意向讀鎖(說明表中有些行被行級讀鎖鎖住了),意向讀鎖和表級寫鎖互斥,因此,事務 B 申請表的寫鎖會被阻塞。

也就是說原先步驟 2 的遍歷表中每一行的操作,簡化成了判斷下整張表上有無表級意向鎖就行了,效率大幅提升。

圖片

這就是為什么要有意向鎖了。

責任編輯:武曉燕 來源: 飛天小牛肉
相關推薦

2023-07-03 08:15:46

MySQLInnoDB

2022-04-21 10:39:29

InnoDB意向鎖SQL

2022-06-15 09:02:32

JVM線程openJDK

2024-05-15 09:23:45

MySQL排他鎖共享鎖

2024-10-31 08:50:14

2024-04-24 09:02:58

線程池面試鎖升級

2023-12-28 17:33:25

意向鎖MySQL開發者

2025-03-25 12:00:00

@Value?Spring開發

2022-11-28 14:27:17

插入意向鎖age

2024-04-01 00:00:00

Redis緩存服務消息隊列

2024-04-22 00:00:00

CASCPU硬件

2023-07-13 09:16:47

循環隊列指針front?

2022-01-04 22:11:43

磁盤Redolog持久化

2024-11-26 08:52:34

SQL優化Kafka

2011-08-09 16:08:53

數據庫連接

2024-08-27 09:05:45

2025-06-05 03:10:00

mmapmalloc共享內存

2025-06-04 02:55:00

MySQL意向鎖記錄鎖

2024-06-06 09:03:37

MySQL數據庫共享鎖

2024-05-27 11:35:40

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av在线播放网址 | 爱爱免费视频 | 黄色在线免费观看 | 国产精品a久久久久 | 九色视频网站 | 日韩a v在线免费观看 | 亚洲成人久久久 | 一级毛片大全免费播放 | 91电影 | 成人毛片在线视频 | 欧美精品网站 | 一区二区三区亚洲精品国 | 国内精品免费久久久久软件老师 | 中文字幕av在线 | 中文字幕亚洲一区二区三区 | 一区天堂 | 久久不卡 | 最新av片| 中文字幕在线第一页 | 91精品国产91久久综合桃花 | 亚洲精品丝袜日韩 | 天天爱爱网| 精品欧美一区二区三区免费观看 | 欧美高清视频在线观看 | 国产美女精品视频 | 中文字幕国产一区 | 正在播放国产精品 | 国产精品日韩欧美一区二区三区 | 亚洲一区二区三区视频免费观看 | 亚洲精品第一页 | 狠狠色狠狠色综合系列 | 久久区二区 | 亚洲一区二区三区在线免费观看 | 波多野结衣av中文字幕 | 一区二区久久 | 韩日一区二区三区 | 一区二区三区四区国产 | 色婷婷久久久久swag精品 | 午夜免费视频观看 | 九九国产在线观看 | 国产一区二区影院 |