{eval=Array;=+count(Array);}

亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

問(wèn)答專(zhuān)欄Q & A COLUMN

怎么理解SQL的四個(gè)事務(wù)隔離級(jí)別?

justjavacjustjavac 回答0 收藏1
收藏問(wèn)題

1條回答

BenCHou

BenCHou

回答于2022-06-28 14:00

你好,我是小黃,這個(gè)題目我來(lái)回答下。


事務(wù)的隔離級(jí)別是為了解決并發(fā)問(wèn)題。那么先來(lái)了解下并發(fā)帶來(lái)的問(wèn)題

1)丟失更新 Lost Update:(沒(méi)有加鎖)

兩個(gè)事務(wù)同時(shí)更新一行數(shù)據(jù),最后一個(gè)事務(wù)的更新會(huì)覆蓋掉第一個(gè)事務(wù)的更新,從而導(dǎo)致第一個(gè)事務(wù)更新的數(shù)據(jù)丟失,這是由于沒(méi)有加鎖造成的。

2)臟讀Dirty Reads:(沒(méi)有隔離)

一個(gè)事務(wù)看到了另外一個(gè)事物沒(méi)有提交的更新數(shù)據(jù)。這是事務(wù)沒(méi)有隔離造成的。

3)不可重復(fù)讀:Non-Repeatable Reads

在同一事務(wù)中,多次讀取同一數(shù)據(jù)但是返回不同的結(jié)果,也就是有其他事務(wù)更改了這些數(shù)據(jù)。

4)幻讀:Phantom Reads 并發(fā)造成的

一個(gè)事務(wù)在執(zhí)行過(guò)程中讀取到另一個(gè)事務(wù)已提交的插入數(shù)據(jù)。就是說(shuō)在第一個(gè)事務(wù)開(kāi)始時(shí),讀取到一批數(shù)據(jù),但是伺候另一個(gè)事務(wù)又插入新數(shù)據(jù)并提交,此時(shí)第一個(gè)事務(wù)又讀取到這批數(shù)據(jù)但是發(fā)現(xiàn)多出了一條,貌似產(chǎn)生幻覺(jué)一樣。這是并發(fā)造成的。


接下來(lái)我們說(shuō)說(shuō)這四個(gè)隔離級(jí)別,

1)未提交讀(Read Uncommitted):一個(gè)事務(wù)能夠讀取到 別的事務(wù)中沒(méi)有提交的更新數(shù)據(jù)。事務(wù)可以讀取到未提交的數(shù)據(jù),這也被稱(chēng)為臟讀(dirty read)。

所以這種級(jí)別很有可能讀到臟數(shù)據(jù),隔離級(jí)別最低。

2)提交讀(Read Committed):一個(gè)事務(wù)只能讀取到別的事務(wù)提交的更新數(shù)據(jù)。

一般我們提交讀就可以了。只能讀取到已經(jīng)提交的數(shù)據(jù)。即解決了臟讀,但未解決不可重復(fù)讀。(oracle默認(rèn)的)

3)可重復(fù)讀(Repeated Read):保證同一事務(wù)中先后執(zhí)行的多次查詢(xún)將返回同意結(jié)果,不受其他事務(wù)的影響。這種隔離級(jí)別可能出現(xiàn)幻讀。(mysql默認(rèn)的)

4)序列化(Serializable):不允許事務(wù)并發(fā)執(zhí)行,強(qiáng)制事務(wù)串行執(zhí)行,就是在讀取的每一行數(shù)據(jù)上都加上了鎖,讀寫(xiě)相互都會(huì)阻塞。這種隔離級(jí)別最高,是最安全的,性能最低,不會(huì)出現(xiàn)臟讀,不可重復(fù)讀,幻讀,丟失更新。


那么怎么設(shè)置隔離級(jí)別呢

SET TRANSACTION ISOLATION LEVEL READ COMMITTED; //設(shè)置提交讀隔離級(jí)別

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; //設(shè)置序列化隔離級(jí)別


以上請(qǐng)參考。


若有疑問(wèn),歡迎留言評(píng)論,謝謝。

評(píng)論0 贊同0
  •  加載中...

最新活動(dòng)

您已邀請(qǐng)0人回答 查看邀請(qǐng)

我的邀請(qǐng)列表

  • 擅長(zhǎng)該話(huà)題
  • 回答過(guò)該話(huà)題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說(shuō)句感謝的話(huà)吧!
付費(fèi)偷看金額在0.1-10元之間
<