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

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

怎么理解SQL的四個事務隔離級別?

justjavacjustjavac 回答0 收藏1
收藏問題

1條回答

BenCHou

BenCHou

回答于2022-06-28 14:00

你好,我是小黃,這個題目我來回答下。


事務的隔離級別是為了解決并發(fā)問題。那么先來了解下并發(fā)帶來的問題

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

兩個事務同時更新一行數(shù)據(jù),最后一個事務的更新會覆蓋掉第一個事務的更新,從而導致第一個事務更新的數(shù)據(jù)丟失,這是由于沒有加鎖造成的。

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

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

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

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

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

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


接下來我們說說這四個隔離級別

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

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

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

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

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

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


那么怎么設置隔離級別呢

SET TRANSACTION ISOLATION LEVEL READ COMMITTED; //設置提交讀隔離級別

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; //設置序列化隔離級別


以上請參考。


若有疑問,歡迎留言評論,謝謝。

評論0 贊同0
  •  加載中...

相關問題

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<