1. 已提交讀隔離級(jí)別 存在的問題:不可重復(fù)讀、讀取被阻塞。 不可重復(fù)讀的意思是指,用于讀取數(shù)據(jù)的事務(wù)在讀取問數(shù)據(jù)后會(huì)立即放棄共享鎖,這樣的話,就會(huì)出現(xiàn)另外的事務(wù)來(lái)更改數(shù)據(jù),更改數(shù)據(jù)的事務(wù)具有排它鎖,當(dāng)這個(gè)擁有排它鎖的事務(wù)提交之前,原來(lái)的進(jìn)行讀取數(shù)據(jù)的事務(wù)就會(huì)發(fā)生阻塞(讀取不了,因?yàn)榕潘i和共享鎖不相容),所以我沒就要把擁有排它鎖的事務(wù)提交,使其把排它鎖釋放,這是讀取數(shù)據(jù)的事務(wù)就能進(jìn)行新的讀取,這個(gè)時(shí)候,讀取的數(shù)據(jù)就可能和第一次讀取的數(shù)據(jù)不一樣了,這種讀取結(jié)果的差異性,就是不可重復(fù)讀。 現(xiàn)在我們來(lái)解決讀取阻塞的問題——已提交讀快照隔離級(jí)別 2. 已提交讀快照隔離級(jí)別 解決讀取阻塞的意思就是說(shuō),在其他的擁有排它鎖的事務(wù)沒有提交的情況下,我們依然可以執(zhí)行讀取數(shù)據(jù)的事務(wù),這是因?yàn)橐烟峤蛔x快照隔離級(jí)別中,事務(wù)的讀取操作不為數(shù)據(jù)項(xiàng)添加共享鎖。所以就不存在共享鎖和排它鎖的沖突。也就不會(huì)發(fā)生讀取阻塞的問題。 雖然已提交讀快照隔離級(jí)別解決了讀取被阻塞的問題,但依然沒有解決不可重復(fù)讀的問題,因?yàn)榈葥碛信潘i的事務(wù)提交之后,讀取數(shù)據(jù)的事務(wù)再次執(zhí)行,讀取的是更改后的數(shù)據(jù),得到的結(jié)果和以前的有可能不一樣,這就是不可重復(fù)讀。 現(xiàn)在我們來(lái)解決不可重復(fù)讀的問題——快照隔離級(jí)別、可重復(fù)讀隔離級(jí)別 3. 快照隔離級(jí)別 快照隔離級(jí)別之所以能解決不可重復(fù)讀的問題是因?yàn)?,?dāng)讀取的事務(wù)再次執(zhí)行,讀取的依然是更改前的數(shù)據(jù)(也就是該數(shù)據(jù)項(xiàng)在更改前最后提交的版本)。那么讀取的數(shù)據(jù)肯定是一樣的,這就是可重復(fù)讀。 4. 可重復(fù)讀隔離級(jí)別 可重復(fù)讀隔離級(jí)別在應(yīng)用時(shí),進(jìn)行讀取的事務(wù)在提交之前是不會(huì)釋放共享鎖的,所以就不允許占有排它鎖的更改事務(wù)對(duì)數(shù)據(jù)進(jìn)行更改,所以讀取事務(wù)的去的數(shù)據(jù)才能保持一致。 值的注意的是,該隔離級(jí)別會(huì)出現(xiàn)幻讀的情況。(在查詢語(yǔ)句的查詢范圍內(nèi)插入新的記錄)——插入數(shù)據(jù)的操作不會(huì)占用排它鎖嗎? 現(xiàn)在來(lái)解決幻讀現(xiàn)象的問題——可序列化隔離級(jí)別 5. 可序列化隔離級(jí)別 可序列化隔離級(jí)別可以阻止在事務(wù)讀取的范圍內(nèi)插入新行;就是在讀取數(shù)據(jù)的事務(wù)沒有提交之前,不能進(jìn)行插入數(shù)據(jù)的操作(能不能進(jìn)行數(shù)據(jù)的刪除呢?估計(jì)也不能)。 |
|
來(lái)自: 春樹思圖南 > 《sql server》