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

MySQL的臟讀、幻讀、不可重復(fù)讀是什么

數(shù)據(jù)庫(kù) MySQL
臟讀、不可重復(fù)讀和幻讀這三種異?,F(xiàn)象是在SQL-92標(biāo)準(zhǔn)中定義的,同時(shí),SQL-92標(biāo)準(zhǔn)還確定了4種隔離級(jí)別來(lái)處理這些異常情況,按照嚴(yán)格程度從高到低排列分別為:順序執(zhí)行(Serializable)、可重復(fù)讀(Repeatable reads)、提交讀(Read committed)、未提交讀(Read uncommitted)。

簡(jiǎn)而言之

臟讀:指讀取了其他事務(wù)尚未提交的數(shù)據(jù),可能導(dǎo)致不一致性。

不可重復(fù)讀:在對(duì)數(shù)據(jù)進(jìn)行讀取的過(guò)程中,有其他事務(wù)對(duì)數(shù)據(jù)進(jìn)行了修改(UPDATE、DELETE),導(dǎo)致第二次讀取的結(jié)果與第一次不一致。

幻讀:指一個(gè)事務(wù)在進(jìn)行范圍查詢時(shí),另一個(gè)事務(wù)在該范圍內(nèi)進(jìn)行新增操作(INSERT),導(dǎo)致范圍查詢的結(jié)果數(shù)目不一致。

什么是臟讀

臟讀又稱為無(wú)效數(shù)據(jù)讀取,指在數(shù)據(jù)庫(kù)訪問(wèn)中,事務(wù)T1修改了某個(gè)數(shù)值,隨后事務(wù)T2讀取了該數(shù)值,而后因某種原因,T1撤銷了對(duì)該數(shù)值的修改,導(dǎo)致T2讀取到的數(shù)據(jù)變?yōu)闊o(wú)效。

具體而言,臟讀是指一個(gè)事務(wù)正在訪問(wèn)數(shù)據(jù)并對(duì)其進(jìn)行修改,但這些修改尚未提交到數(shù)據(jù)庫(kù)中。此時(shí),另一個(gè)事務(wù)也訪問(wèn)該數(shù)據(jù),并使用了它。由于這些數(shù)據(jù)尚未提交,另一個(gè)事務(wù)所讀取的數(shù)據(jù)就會(huì)成為臟數(shù)據(jù),基于這些臟數(shù)據(jù)所做的操作可能會(huì)產(chǎn)生不正確的結(jié)果。

什么是幻讀

幻讀是指在事務(wù)非獨(dú)立執(zhí)行時(shí)出現(xiàn)的現(xiàn)象,舉例來(lái)說(shuō),第一個(gè)事務(wù)對(duì)表中的數(shù)據(jù)進(jìn)行了修改,涉及到表中的“全部數(shù)據(jù)行”。與此同時(shí),第二個(gè)事務(wù)也修改了該表的數(shù)據(jù),插入了“一行新數(shù)據(jù)”。隨后,操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中仍然存在未修改的數(shù)據(jù)行,就好像出現(xiàn)了幻覺(jué)一般。

一般解決幻讀的方法是通過(guò)增加范圍鎖(RangeS),將檢測(cè)鎖的范圍限定為只讀,這樣便可以避免幻讀的發(fā)生。

值得注意的是,幻讀是不可重復(fù)讀的一種特殊情況:在事務(wù)沒(méi)有獲取范圍鎖的情況下執(zhí)行SELECT … WHERE操作時(shí)可能會(huì)導(dǎo)致幻讀現(xiàn)象的發(fā)生。

什么是不可重復(fù)讀

不可重復(fù)讀是指在數(shù)據(jù)庫(kù)訪問(wèn)中,一個(gè)事務(wù)內(nèi)進(jìn)行兩次相同的查詢卻返回了不同的數(shù)據(jù)。這種現(xiàn)象是由于系統(tǒng)中其他事務(wù)的提交修改所引起的。例如,事務(wù)T1讀取某一數(shù)據(jù),事務(wù)T2讀取并修改了該數(shù)據(jù),隨后T1為了檢驗(yàn)讀取值再次讀取該數(shù)據(jù),結(jié)果獲取到不同的數(shù)值。

更通俗易懂的說(shuō)法是:在一個(gè)事務(wù)中多次讀取同一數(shù)據(jù),在該事務(wù)未結(jié)束之前,另一個(gè)事務(wù)也訪問(wèn)同一數(shù)據(jù)。在第一個(gè)事務(wù)兩次讀取數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改,導(dǎo)致第一個(gè)事務(wù)讀取到的數(shù)據(jù)可能不同,這就導(dǎo)致了在同一個(gè)事務(wù)內(nèi)兩次讀取數(shù)據(jù)的結(jié)果不一致,因此稱為不可重復(fù)讀,即原始讀取結(jié)果不可重復(fù)。

擴(kuò)展知識(shí)之事務(wù)隔離級(jí)別

臟讀、不可重復(fù)讀和幻讀這三種異?,F(xiàn)象是在SQL-92標(biāo)準(zhǔn)中定義的,同時(shí),SQL-92標(biāo)準(zhǔn)還確定了4種隔離級(jí)別來(lái)處理這些異常情況,按照嚴(yán)格程度從高到低排列分別為:順序執(zhí)行(Serializable)、可重復(fù)讀(Repeatable reads)、提交讀(Read committed)、未提交讀(Read uncommitted)。

責(zé)任編輯:武曉燕 來(lái)源: 碼上遇見(jiàn)你
相關(guān)推薦

2019-03-21 09:06:00

數(shù)據(jù)庫(kù)復(fù)讀幻讀

2022-04-27 07:32:02

臟讀幻讀不可重復(fù)讀

2024-04-24 08:26:35

事務(wù)數(shù)據(jù)InnoDB

2023-11-01 14:13:00

MySQL事務(wù)隔離級(jí)別

2022-01-03 07:18:05

臟讀幻讀 MySQL

2025-02-26 10:40:44

數(shù)據(jù)庫(kù)并發(fā)幻讀

2022-06-29 11:01:05

MySQL事務(wù)隔離級(jí)別

2023-02-02 07:06:10

2018-01-03 09:02:13

不可重復(fù)讀幻讀MySQL

2021-08-02 09:01:05

MySQL 多版本并發(fā)數(shù)據(jù)庫(kù)

2023-10-26 00:41:46

臟讀數(shù)據(jù)幻讀

2024-05-13 11:46:33

MySQL數(shù)據(jù)庫(kù)

2021-04-20 19:21:50

臟讀MySQL幻讀

2024-07-16 08:19:46

MySQL數(shù)據(jù)InnoDB

2019-05-28 13:50:27

MySQL幻讀數(shù)據(jù)庫(kù)

2021-09-07 10:33:42

MySQL事務(wù)隔離性

2019-12-24 14:50:01

MySQL可重復(fù)讀數(shù)據(jù)庫(kù)

2024-03-11 00:00:00

mysqlInnoDB幻讀

2022-06-30 08:00:00

MySQL關(guān)系數(shù)據(jù)庫(kù)開(kāi)發(fā)

2023-12-26 08:08:02

Spring事務(wù)MySQL
點(diǎn)贊
收藏

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