SQL Server 的隔離等級(jí)級(jí)別
發(fā)表時(shí)間:2023-09-12 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]軟件等級(jí):更新時(shí)間:2016-11-11版本號(hào):v5.7.10 MySQL Server x64官方正式版免費(fèi)下載立即下載 SQL Server 的隔離級(jí)別未提交讀(事務(wù)隔離的最低級(jí)別,僅可保證不讀取物理?yè)p壞的數(shù)據(jù))。提交讀(SQL Server 默認(rèn)級(jí)別)?芍貜(fù)讀?纱凶x(事務(wù)隔...
SQL Server 的隔離級(jí)別
未提交讀(事務(wù)隔離的最低級(jí)別,僅可保證不讀取物理?yè)p壞的數(shù)據(jù))。
提交讀(SQL Server 默認(rèn)級(jí)別)。
可重復(fù)讀。
可串行讀(事務(wù)隔離的最高級(jí)別,事務(wù)之間完全隔離)。
如果事務(wù)在可串行讀隔離級(jí)別上運(yùn)行,則可以保證任何并發(fā)重疊事務(wù)均是串行的。
下面四種隔離級(jí)別允許不同類型的行為。
當(dāng)鎖定用作并發(fā)控制機(jī)制時(shí),它可以解決并發(fā)問題。這使所有事務(wù)得以在彼此完全隔離的環(huán)境中運(yùn)行,但是任何時(shí)候都可以有多個(gè)正在運(yùn)行的事務(wù)。
可串行性是通過運(yùn)行一組并發(fā)事務(wù)達(dá)到的數(shù)據(jù)庫(kù)狀態(tài),等同于這組事務(wù)按某種順序連續(xù)執(zhí)行時(shí)所達(dá)到的數(shù)據(jù)庫(kù)狀態(tài)!
SQL-92 隔離級(jí)別
盡管可串行性對(duì)于事務(wù)確保數(shù)據(jù)庫(kù)中的數(shù)據(jù)在所有時(shí)間內(nèi)的正確性相當(dāng)重要,然而許多事務(wù)并不總是要求完全的隔離。例如,多個(gè)作者工作于同一本書的不同章節(jié)。新章節(jié)可以在任意時(shí)候提交到項(xiàng)目中。但是,對(duì)于已經(jīng)編輯過的章節(jié),沒有編輯人員的批準(zhǔn),作者不能對(duì)此章節(jié)進(jìn)行任何更改。這樣,盡管有未編輯的新章節(jié),但編輯人員仍可以確保在任意時(shí)間該書籍項(xiàng)目的正確性。編輯人員可以查看以前編輯的章節(jié)以及最近提交的章節(jié)。
事務(wù)準(zhǔn)備接受不一致數(shù)據(jù)的級(jí)別稱為隔離級(jí)別。隔離級(jí)別是一個(gè)事務(wù)必須與其它事務(wù)進(jìn)行隔離的程度。較低的隔離級(jí)別可以增加并發(fā),但代價(jià)是降低數(shù)據(jù)的正確性。相反,較高的隔離級(jí)別可以確保數(shù)據(jù)的正確性,但可能對(duì)并發(fā)產(chǎn)生負(fù)面影響。應(yīng)用程序要求的隔離級(jí)別確定了 SQL Server 使用的鎖定行為
1、數(shù)據(jù)庫(kù)事務(wù)的隔離級(jí)別:四種
隔離級(jí)別 |
臟讀(Dirty Read) |
不可重復(fù)讀(NonRepeatable Read) |
幻讀(Phantom Read) |
讀未提交(Read uncommitted) |
可能 |
可能 |
可能 |
讀已提交(Read committed) |
不可能 |
可能 |
可能 |
可重復(fù)讀(Repeatable read) |
不可能 |
不可能 |
可能 |
可串行化(Serializable ) |
不可能 |
不可能 |
不可能 |
2、數(shù)據(jù)庫(kù)一般的默認(rèn)隔離離級(jí)別是“讀已提交”,默認(rèn)的事務(wù)隔離級(jí)別下:Insert,update ,delete下的是X鎖, 會(huì)等待事務(wù)完成。通常情況下可以把隔離級(jí)別設(shè)為Read Commited,它能避免臟讀,而且有較好的并發(fā)性能。盡管它會(huì)導(dǎo)致不可重復(fù)讀、虛讀和第二類更新丟失等問題,在可能出現(xiàn)這類問題的個(gè)別場(chǎng)合可以由應(yīng)用程序釆用悲觀鎖或樂觀鎖來(lái)控制。
3、SQL語(yǔ)句可以使用SET TRANSACTION ISOLATION LEVEL來(lái)設(shè)置事務(wù)的隔離級(jí)別。如:SET TRANSACTION ISOLATION LEVEL Read Committed。若要在應(yīng)用程序中使用更嚴(yán)格或較寬松的隔離級(jí)別,可以通過使用 set transaction isolation level語(yǔ)句設(shè)置會(huì)話的隔離級(jí)別,來(lái)自定義整個(gè)會(huì)話的鎖定。
指定隔離級(jí)別后,sql server會(huì)話中所有select語(yǔ)句的鎖定行為都運(yùn)行于該隔離級(jí)別上,并一直保持有效直到會(huì)話終止或者將隔離級(jí)別設(shè)置為另一個(gè)級(jí)別。
4、另外要提一點(diǎn):SQL標(biāo)準(zhǔn)對(duì)事務(wù)隔離級(jí)別的規(guī)定,是按該級(jí)別不可能發(fā)生什么問題來(lái)確定的,不一定會(huì)發(fā)生這樣的問題; 所以,不同的數(shù)據(jù)庫(kù)對(duì)事務(wù)隔離的級(jí)別約定不一樣,比如,有的數(shù)據(jù)庫(kù)把可重復(fù)讀級(jí)別按可串行化來(lái)對(duì)待。(lkdlhw_2000個(gè)人理解:各個(gè)數(shù)據(jù)庫(kù)應(yīng)該都遵循四種標(biāo)準(zhǔn)的事務(wù)隔離等級(jí)的定義,但是某些數(shù)據(jù)庫(kù)具體實(shí)現(xiàn)可能不存在四種,因?yàn)榇谢梢员苊獠豢芍貜?fù)讀,因此某些數(shù)據(jù)庫(kù)語(yǔ)法上支持設(shè)置事務(wù)隔離等級(jí)為不可重復(fù)讀,但實(shí)際上是串行化在起作用。也就是說(shuō)只要該級(jí)別能夠避免不可重復(fù)讀的問題,就可以稱之為不可重復(fù)讀取級(jí)別。)
5、該隔離級(jí)別定義一個(gè)事務(wù)必須與其他事務(wù)所進(jìn)行的資源或數(shù)據(jù)更改相隔離的程度。事務(wù)隔離級(jí)別控制:
讀取數(shù)據(jù)時(shí)是否占用鎖以及所請(qǐng)求的鎖類型。
占用讀取鎖的時(shí)間。
引用其他事務(wù)修改的行的讀取操作是否:
在該行上的排他鎖被釋放之前阻塞其他事務(wù)。
檢索在啟動(dòng)語(yǔ)句或事務(wù)時(shí)存在的行的已提交版本。
讀取未提交的數(shù)據(jù)修改
常見的網(wǎng)絡(luò)操作系統(tǒng)有UNIX、Netware、Windows NT、Linux等,網(wǎng)絡(luò)軟件的漏洞及缺陷被利用,使網(wǎng)絡(luò)遭到入侵和破壞。