日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql加锁过程详解(2)-关于mysql 幻读理解

發布時間:2025/3/20 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql加锁过程详解(2)-关于mysql 幻读理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Mysql加鎖過程詳解(1)-基本知識 Mysql加鎖過程詳解(2)-關于mysql 幻讀理解 Mysql加鎖過程詳解(3)-關于mysql 幻讀理解 Mysql加鎖過程詳解(4)-select for update/lock in share mode 對事務并發性影響 Mysql加鎖過程詳解(5)-innodb 多版本并發控制原理詳解 Mysql加鎖過程詳解(6)-數據庫隔離級別(1) Mysql加鎖過程詳解(6)-數據庫隔離級別(2)-通過例子理解事務的4種隔離級別 Mysql加鎖過程詳解(7)-初步理解MySQL的gap鎖 Mysql加鎖過程詳解(8)-理解innodb的鎖(record,gap,Next-Key lock) 首先,mysql 幻讀并非是”一個事務內進行兩次相同操作居然得到了不一樣的結果”,因為它根本不可能發生在使用了 read view / MVCC 的 RR 隔離級別下,這種幻讀的定義更適合給 Oracle,Oracle 的事務隔離只有兩級,RC 和 Serializable。然后還有很多人辯解說不可重復讀是針對某條記錄的,幻讀是針對記錄集合的,這是在自我安慰么?

這里給出 mysql 幻讀的比較形象的場景:

?

users: id 主鍵

1、T1:select * from users where id = 1;

2、T2:insert into `users`(`id`, `name`) values (1, 'big cat');

3、T1:insert into `users`(`id`, `name`) values (1, 'big cat');

?

T1 :主事務,檢測表中是否有 id 為 1 的記錄,沒有則插入,這是我們期望的正常業務邏輯。

T2 :干擾事務,目的在于擾亂 T1 的正常的事務執行。

?

在 RR 隔離級別下,1、2 是會正常執行的,3 則會報錯主鍵沖突,對于 T1 的業務來說是執行失敗的,這里 T1 就是發生了幻讀,因為T1讀取的數據狀態并不能支持他的下一步的業務,見鬼了一樣。

在 Serializable 隔離級別下,1 執行時是會隱式的添加 gap 共享鎖的,從而 2 會被阻塞,3 會正常執行,對于 T1 來說業務是正確的,成功的扼殺了擾亂業務的T2,對于T1來說他讀取的狀態是可以拿來支持業務的。

?

所以 mysql 的幻讀并非什么讀取兩次返回結果集不同,而是事務在插入事先檢測不存在的記錄時,驚奇的發現這些數據已經存在了,之前的檢測讀獲取到的數據如同鬼影一般。

這里要靈活的理解讀取的意思,第一次select是讀取,第二次的 insert 其實也屬于隱式的讀取,只不過是在 mysql 的機制中讀取的,插入數據也是要先讀取一下有沒有主鍵沖突才能決定是否執行插入。

不可重復讀側重表達 讀-讀,幻讀則是說 讀-寫,用寫來證實讀的是鬼影。

?

下面例子版本

SELECT VERSION();

?

?

?

例子1,讀提交

?????????????????????????????????????????????????????? a

b

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

SET AUTOCOMMIT=0;

1.不可重復讀

begin

begin

INSERT test VALUES(1,1);

?

SELECT * FROM test;

?

?

SELECT * FROM test;

?

?

?

commit

?

?

SELECT * FROM test;

?

?

?

?

COMMIT

B在一個事務的查詢的結果變了,不可重復讀

2.鎖

begin

begin

INSERT test VALUES(2,2);

?

?

SELECT * FROM test;

?

?

?

INSERT test VALUES(2,2);

?

Lock wait timeout exceeded; try restarting transaction

COMMIT

COMMIT

?

?

begin

?

INSERT test VALUES(3,3);

?

INSERT test VALUES(4,4);

?

COMMIT

?

?

BEGIN

BEGIN

SELECT COUNT(*) FROM test WHERE a>2;

?

SELECT COUNT(*) FROM test WHERE a>2;

?

??

INSERT test VALUES(5,5);

?

SELECT COUNT(*) FROM test WHERE a>2;

?

SELECT COUNT(*) FROM test WHERE a>2;

?

??

COMMIT

?

SELECT COUNT(*) FROM test WHERE a>2;

SELECT COUNT(*) FROM test WHERE a>2;

?

?

?

?

?

?

?

例子2:重復讀

?

?????????????????????????????????????????????????????? a

b

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

SET AUTOCOMMIT=0;

1.可重復讀

begin

begin

INSERT test VALUES(1,1);

?

SELECT * FROM test;

?

?

SELECT * FROM test;

?

?

?

commit

?

?

SELECT * FROM test;

?

?

?

?

COMMIT

?

BEGIN

?

SELECT * FROM test;

?

?

?

?

COMMIT

B在一個事務的查詢的沒變

2鎖

begin

begin

INSERT test VALUES(2,2);

?

?

SELECT * FROM test;

?

?

?

INSERT test VALUES(2,2);

?

Lock wait timeout exceeded; try restarting transaction

COMMIT

COMMIT

3(幻讀)

BEGIN

BEGIN

INSERT test VALUES(3,3);

?

SELECT * FROM test;

?

?

SELECT * FROM test;

?

?

COMMIT

?

?

SELECT * FROM test;

?

?

?

INSERT test VALUES(3,3);

?

Duplicate entry '3' for key 'PRIMARY'

?

COMMIT

?

BEGIN

?

SELECT * FROM test;

?

?

?

COMMIT

幻讀,b明明查到沒有,插入時候提示主鍵沖突,剛剛查詢沒有,出現幻覺?

?

?

?

?

begin

?

INSERT test VALUES(4,4);

?

COMMIT

4.可重復讀

BEGIN

BEGIN

SELECT COUNT(*) FROM test WHERE a>2;

?

SELECT COUNT(*) FROM test WHERE a>2;

?

??

INSERT test VALUES(5,5);

?

SELECT COUNT(*) FROM test WHERE a>2;

?

SELECT COUNT(*) FROM test WHERE a>2;

?

??

COMMIT

?

BEGIN

?

SELECT COUNT(*) FROM test WHERE a>2;

SELECT COUNT(*) FROM test WHERE a>2;

?

?

?

?

COMMIT

COMMIT

?

?

?

?

?

?

?

網上很多說范圍啊,count等等都是不對的,不用于幻讀

?

總結

以上是生活随笔為你收集整理的Mysql加锁过程详解(2)-关于mysql 幻读理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产三区四区视频 | 天天做天天射 | 国产美女黄网站 | 老熟妇毛茸茸 | 一区二区三区高清在线观看 | 亚洲综合激情小说 | 日本一区二区三区电影在线观看 | 告诉我真相俄剧在线观看 | 免费看黄色一级片 | 国产精品第13页 | 天天干天天干 | 澳门久久久| 国产 福利 在线 | 男人在线网站 | 天堂av官网 | 亚洲精品大全 | 欧美一区二区在线看 | 亚洲精品av中文字幕在线在线 | 国产91综合 | 日本成人社区 | 中国黄色一级大片 | 亚洲熟妇无码一区二区三区 | 久久久国产一区二区三区 | 最新激情网 | 波多野结衣爱爱 | 色呦呦麻豆 | 嫩草国产在线 | 翔田千里一区二区三区av | 午夜888 | 久久久性 | 亚洲AV无码精品国产 | 久久国产中文 | 精品中文字幕一区二区 | av我不卡 | 宅男噜噜噜 | 国产精品久久久久久亚洲伦 | 深夜福利一区二区 | 欧美午夜寂寞影院 | 精品国产一区三区 | 午夜网站在线 | 丝袜毛片 | 美女伊人网 | 九九九精品视频 | 中文字幕人妻熟女在线 | 国产毛片毛片毛片毛片 | 天堂网色 | 久久免费在线观看 | 免费成人深夜夜行网站视频 | 欧美亚一区二区三区 | 天天色天天操天天 | 宿舍女女闺蜜调教羞辱 | 哪个网站可以看毛片 | 国产成人精品在线播放 | 欧美片一区二区三区 | av看片网站 | 一级片在线观看免费 | 国产对白自拍 | 巨胸大乳www视频免费观看 | 日韩高清毛片 | 日韩在线观看不卡 | 小毛片在线观看 | 少妇xxx| 欧美日本黄色 | 国产精品99久久久久久大便 | 色哟哟中文字幕 | 黄色大片在线 | 狠狠躁18三区二区一区传媒剧情 | 97人妻精品一区二区三区动漫 | 99热这里只有精品首页 | 午夜激情视频在线观看 | 国产一区二区影院 | 亚洲欧美在线播放 | 91国产在线免费观看 | 亚洲av无码一区二区三区网站 | 国产福利精品在线 | 在线观看国产亚洲 | 国产精品日韩精品欧美精品 | 色婷婷av一区二区三区gif | 一眉道姑 | 人人看人人做 | 91麻豆产精品久久久久久 | 色先锋资源网 | 欧美黄色激情视频 | 日本边添边摸边做边爱 | 毛片基地免费观看 | 欧美一及片 | 传媒视频在线观看 | 日本免费黄色网 | 狠狠做深爱婷婷久久综合一区 | 91国在线观看 | 无码一区二区精品 | 国产一二三在线视频 | 男人和女人做爽爽视频 | 国产女无套免费视频 | 特级西西444www高清大视频 | 影音先锋天堂网 | 校园春色中文字幕 | 天堂资源站 | 蜜臀久久精品久久久久久酒店 |