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

S 鎖與 X 鎖,當前讀與快照讀!

數據庫 MySQL
S 鎖,英文為 Shared Lock,中文譯作共享鎖,有時候我們也稱之為讀鎖,即 Read Lock。S 鎖之間是共享的,或者說是互不阻塞的。

MySQL 中的鎖還是蠻多的,在之前的文章中,松哥和大家介紹過 MySQL 中的 MDL 鎖,今天我們再來看看 MySQL 中比較重要的兩個鎖:S 鎖和 X 鎖。

1. S 鎖

S 鎖,英文為 Shared Lock,中文譯作共享鎖,有時候我們也稱之為讀鎖,即 Read Lock。S 鎖之間是共享的,或者說是互不阻塞的。

當事務讀取一條記錄時,需要先獲取該記錄的 S 鎖。

舉個例子:

事務 T1 對記錄 R1 加上了 S 鎖,那么事務 T1 可以讀取 R1 這一行記錄,但是不能修改 R1,其他事務 T2 可以繼續對 R1 添加 S 鎖,但是不能添加 X 鎖,只有當 R1 上面的 S 鎖釋放了,才能加上 X 鎖。

舉一個加 S 鎖的例子,如下圖:

此時,對于 id=1 的這條記錄,只能讀取不能修改了。假設在另外一個事務 T 中,執行如下 SQL 是沒問題的,因為 S 鎖是共享鎖,S 鎖和 S 鎖之間是兼容的:

select * from user where id=1 lock in share mode;

但是如果執行如下 SQL 則會被阻塞,因為修改數據需要獲取 X 鎖,而 S 鎖和 X 鎖不兼容:

update user set username='javaboy' where id=1;

上面這個更新語句內部會獲取 X 鎖,對于一些手動添加了 X 鎖的查詢語句,也會阻塞,例如下面這個:

可以看到,這個 SQL 執行之后就被阻塞了。

2. X 鎖

X 鎖,英文為 Exclusive Lock,中文譯作排他鎖,有時候我們也稱之為寫鎖,即 Write Lock。如同它的名字,X 鎖是具有排他性的,即一個寫鎖會阻塞其他的 X 鎖和 S 鎖。

當事務需要修改一條記錄時,需要先獲取該記錄的 X 鎖。

舉個例子:

事務 T1 對記錄 R1 加上了 X 鎖,那么事務 T1 即可以讀取 R1 也可以修改 R1,而其他事務則不能對 R1 再添加任何鎖,直到 T1 釋放了 R1 上的鎖。

如上文圖示,鎖定讀的格式是這樣的:

select .... for update;

3. 當前讀與快照讀

由上面這兩種鎖,又引申出來兩種讀:

3.1 快照讀

快照讀(SnapShot Read)是一種一致性不加鎖的讀,是 InnoDB 存儲引擎并發如此之高的核心原因之一。

在可重復讀的隔離級別下,事務啟動的時候,就會針對當前庫拍一個照片(快照),快照讀讀取到的數據要么就是拍照時的數據,即事務開啟那一瞬間數據庫中的數據,要么就是當前事務自身插入/修改過的數據。

我們日常所用的不加鎖的查詢,都屬于快照讀,這個我就不演示了。

3.2 當前讀

與快照讀相對應的就是當前讀,當前讀就是讀取最新數據,而不是歷史版本的數據,換言之,在可重復讀隔離級別下,如果使用了當前讀,也可以讀到別的事務已提交的數據。

松哥舉個例子:

MySQL 事務開啟兩個會話 A 和 B。

首先在 A 會話中開啟事務并查詢 id 為 1 的記錄:

接下來我們在 B 會話中對 id 為 1 的數據進行修改,如下:

注意 B 會話不要開啟事務或者開啟了及時提交事務,否則 update 語句占用一把排他鎖會導致一會在 A 會話中用鎖時發生阻塞。

接下來,回到 A 會話中繼續做查詢操作,如下:

可以看到,A 會話中第一個查詢是快照讀,讀取到的是當前事務開啟時的數據狀態,后面兩個查詢則是當前讀,讀取到了當前最新的數據(B 會話中修改后的數據)。

4. 小結

好啦,一個小小的知識點,日積月累,fighting!

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2022-02-17 21:13:08

MySQL架構體系

2024-05-17 09:33:22

樂觀鎖CASversion

2024-09-02 00:00:00

MySQL幻讀數據

2022-12-27 10:02:38

MVCC機制Innodb

2024-07-25 09:01:22

2023-02-23 10:32:52

樂觀鎖

2025-05-27 01:00:00

2021-03-30 09:45:11

悲觀鎖樂觀鎖Optimistic

2022-04-29 11:39:28

MySQL幻讀Gap Lock

2017-05-08 11:46:15

Java多線程

2010-07-26 15:17:46

SQL Server鎖

2011-08-18 13:44:42

Oracle悲觀鎖樂觀鎖

2017-05-31 14:03:07

Java多線程內置鎖與顯示鎖

2021-03-31 10:05:26

偏向鎖輕量級鎖

2023-07-05 08:18:54

Atomic類樂觀鎖悲觀鎖

2025-02-08 08:10:00

2024-12-03 00:35:20

2023-06-02 08:29:24

https://wwMutex

2019-04-19 09:48:53

樂觀鎖悲觀鎖數據庫

2019-05-05 10:15:42

悲觀鎖樂觀鎖數據安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 特级一级黄色片 | 国产精品爱久久久久久久 | 国产成人在线观看免费 | 欧美αv| 久久在线看 | 日韩精品一区二区三区中文字幕 | 在线欧美亚洲 | 99免费在线观看视频 | 久久精品小视频 | 国产一区二区久久 | 国产久视频 | 国产精品成人一区二区三区夜夜夜 | 日本三级日产三级国产三级 | 久草新在线| 午夜av一区二区 | 欧美一级特黄aaa大片在线观看 | 精品久久久久久久人人人人传媒 | 艹逼网 | www.日韩高清 | 久久成人午夜 | 亚洲国产精品一区二区久久 | jlzzjlzz国产精品久久 | 日本不卡视频在线播放 | www.欧美.com| 99免费精品视频 | 一区二区精品 | 成人av网站在线观看 | 自拍偷拍亚洲视频 | 东京久久| 日韩欧美在线视频 | 国产一区三区在线 | 欧美一区二区三区在线播放 | 欧美理论片在线观看 | 国产高清区 | 国产高清视频一区二区 | 国产原创在线观看 | 在线免费看91| 欧美精品乱码久久久久久按摩 | 黄色毛片在线观看 | 国产精品久久久久久久久大全 | 国产农村妇女精品一二区 |