自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

InnoDB,快照讀,在RR和RC下有何差異?(很多人,以為自己懂了...)

數(shù)據(jù)庫(kù) MySQL
MySQL數(shù)據(jù)庫(kù),InnoDB存儲(chǔ)引擎,為了提高并發(fā),使用MVCC機(jī)制,在并發(fā)事務(wù)時(shí),通過讀取數(shù)據(jù)行的歷史數(shù)據(jù)版本,不加鎖,來提高并發(fā)的一種不加鎖一致性讀。

什么是快照讀(Snapshot Read)?

MySQL數(shù)據(jù)庫(kù),InnoDB存儲(chǔ)引擎,為了提高并發(fā),使用MVCC機(jī)制,在并發(fā)事務(wù)時(shí),通過讀取數(shù)據(jù)行的歷史數(shù)據(jù)版本,不加鎖,來提高并發(fā)的一種不加鎖一致性讀(Consistent Nonlocking Read)。

畫外音:本文所有討論基于MySQL-InnoDB。

快照讀的內(nèi)核原理,詳見:《??InnoDB并發(fā)如此高,原因竟然在這???》

什么是讀提交(Read Committed)?

(1)數(shù)據(jù)庫(kù)領(lǐng)域,事務(wù)隔離級(jí)別的一種,簡(jiǎn)稱RC;

(2)它解決“讀臟”問題,保證讀取到的數(shù)據(jù)行都是已提交事務(wù)寫入的;

(3)它可能存在“讀幻影行”問題,同一個(gè)事務(wù)里,連續(xù)相同的read可能讀到不同的結(jié)果集;

什么是可重復(fù)讀(Repeated Read)?

(1)數(shù)據(jù)庫(kù)領(lǐng)域,事務(wù)隔離級(jí)別的一種,簡(jiǎn)稱RR;

(2)它不但解決“讀臟”問題,還部分解決了“讀幻影行”問題,同一個(gè)事務(wù)里,連續(xù)相同的read讀到相同的結(jié)果集;

在讀提交(RC),可重復(fù)讀(RR)兩個(gè)不同的事務(wù)的隔離級(jí)別下,快照讀有什么不同呢?我們一起來做一些實(shí)驗(yàn)。

假設(shè)有InnoDB表:

t(id PK, name);

表中有三條記錄:

  • shenjian
  • zhangsan
  • lisi

case 1,兩個(gè)并發(fā)事務(wù)A,B執(zhí)行的時(shí)間序列如下(A先于B開始,B先于A結(jié)束):

A1: start transaction;
B1: start transaction;
A2: select * from t;
B2: insert into t values (4, wangwu);
A3: select * from t;
B3: commit;
A4: select * from t;

提問1:假設(shè)事務(wù)的隔離級(jí)別是可重復(fù)讀RR,事務(wù)A中的三次查詢,A2, A3, A4分別讀到什么結(jié)果集?

提問2:假設(shè)事務(wù)的隔離級(jí)別是讀提交RC,A2, A3, A4又分別讀到什么結(jié)果集呢?

case 2,仍然是上面的兩個(gè)事務(wù),只是A和B開始時(shí)間稍有不同(B先于A開始,B先于A結(jié)束):

         B1: start transaction;

A1: start transaction;

A2: select * from t;
B2: insert into t values (4, wangwu);
A3: select * from t;
B3: commit;
A4: select * from t;

提問3:假設(shè)事務(wù)的隔離級(jí)別是可重復(fù)讀RR,事務(wù)A中的三次查詢,A2, A3, A4分別讀到什么結(jié)果集?

提問4:假設(shè)事務(wù)的隔離級(jí)別是讀提交RC,A2, A3, A4的結(jié)果集又是什么呢?

case 3,仍然是并發(fā)的事務(wù)A與B(A先于B開始,B先于A結(jié)束):

A1: start transaction;
B1: start transaction;
B2: insert into t values (4, wangwu);
B3: commit;
A2: select * from t;

提問5:假設(shè)事務(wù)的隔離級(jí)別是可重復(fù)讀RR,事務(wù)A中的A2查詢,結(jié)果集是什么?

提問6:假設(shè)事務(wù)的隔離級(jí)別是讀提交RC,A2的結(jié)果集又是什么呢?

case 4,事務(wù)開始的時(shí)間再換一下(B先于A開始,B先于A結(jié)束):

case 4,事務(wù)開始的時(shí)間再換一下(B先于A開始,B先于A結(jié)束):
B1: start transaction;

A1: start transaction;

B2: insert into t values (4, wangwu);

B3: commit;
A2: select * from t;

提問7:假設(shè)事務(wù)的隔離級(jí)別是可重復(fù)讀RR,事務(wù)A中的A2查詢,結(jié)果集是什么?

提問8:假設(shè)事務(wù)的隔離級(jí)別是讀提交RC,A2的結(jié)果集又是什么呢?

很多時(shí)候,我們以為自己懂了,其實(shí)...

責(zé)任編輯:趙寧寧 來源: 架構(gòu)師之路
相關(guān)推薦

2023-12-27 18:16:39

MVCC隔離級(jí)別幻讀

2024-09-12 08:32:42

2021-01-30 11:42:53

迭代器代碼元素

2022-02-06 00:07:19

互聯(lián)網(wǎng)失業(yè)職業(yè)

2018-02-13 14:48:17

戴爾

2022-10-26 07:39:36

MVCC數(shù)據(jù)庫(kù)RR

2023-05-31 16:22:36

人工智能AI

2019-12-09 10:02:41

泛型ypeScript前端

2022-07-06 10:33:39

技術(shù)債務(wù)CIO

2017-12-13 15:57:12

2021-06-24 09:08:34

Java代碼泛型

2019-08-21 08:24:34

技術(shù)過濾器代碼

2014-05-09 15:29:21

2020-06-29 08:28:36

v-for 解構(gòu)函數(shù)

2020-11-16 11:24:00

Spring AOP數(shù)據(jù)庫(kù)

2021-01-15 05:39:13

HashMapHashTableTreeMap

2025-02-21 08:48:16

Typescript內(nèi)置聯(lián)合類型

2021-09-07 17:42:16

人工智能AI

2020-06-08 19:16:52

大數(shù)據(jù)IT技術(shù)

2021-02-22 13:14:00

計(jì)算機(jī)編程技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)