事務(wù)的4大特性(ACID):
?文章來源:http://www.zghlxwxcb.cn/news/detail-678811.html
原子性(Atomicity):
?
事務(wù)是數(shù)據(jù)庫的邏輯工作單位,它對(duì)數(shù)據(jù)庫的修改要么全部執(zhí)行,要么全部不執(zhí)行。
?
一致性(Consistemcy):
?
事務(wù)前后,數(shù)據(jù)庫的狀態(tài)都滿足所有的完整性約束。
?
隔離性(Isolation):
?
并發(fā)執(zhí)行的事務(wù)是隔離的,一個(gè)不影響一個(gè)。如果有兩個(gè)事務(wù),運(yùn)行在相同的時(shí)間內(nèi),執(zhí)行相同的功能,事務(wù)的隔離性將確保每一事務(wù)在系統(tǒng)中認(rèn)為只有該事務(wù)在使用系統(tǒng)。這種屬性有時(shí)稱為串行化,為了防止事務(wù)操作間的混淆,必須串行化或序列化請(qǐng)求,使得在同一時(shí)間僅有一個(gè)請(qǐng)求用于同一數(shù)據(jù)。通過設(shè)置數(shù)據(jù)庫的隔離級(jí)別,可以達(dá)到不同的隔離效果。
?
持久性(Durability):
?
在事務(wù)完成以后,該事務(wù)所對(duì)數(shù)據(jù)庫所作的更改便持久的保存在數(shù)據(jù)庫之中,并不會(huì)被回滾。
?
并發(fā)事務(wù)引起的問題:
更新丟失:
?
兩個(gè)事務(wù)都同時(shí)更新一行數(shù)據(jù),但是第二個(gè)事務(wù)卻中途失敗退出,導(dǎo)致對(duì)數(shù)據(jù)的兩個(gè)修改都失效了。這是因?yàn)橄到y(tǒng)沒有執(zhí)行任何的鎖操作,因此并發(fā)事務(wù)并沒有被隔離開來。
?
臟讀:
?
臟讀又稱無效數(shù)據(jù)讀出。一個(gè)事務(wù)讀取另外一個(gè)事務(wù)還沒有提交的數(shù)據(jù)叫臟讀。
?
例如:事務(wù)T1修改了一行數(shù)據(jù),但是還沒有提交,這時(shí)候事務(wù)T2讀取了被事務(wù)T1修改后的數(shù)據(jù),之后事務(wù)T1因?yàn)槟撤N原因Rollback了,那么事務(wù)T2讀取的數(shù)據(jù)就是臟的。
?
不可重復(fù)讀:
?
不可重復(fù)讀是指在同一個(gè)事務(wù)內(nèi),兩個(gè)相同的查詢返回了不同的結(jié)果。
?
例如:事務(wù)T1讀取某一數(shù)據(jù),事務(wù)T2讀取并修改了該數(shù)據(jù),T1為了對(duì)讀取值進(jìn)行檢驗(yàn)而再次讀取該數(shù)據(jù),便得到了不同的結(jié)果。
?
幻讀:
?
事務(wù)在操作過程中進(jìn)行兩次查詢,第二次查詢的結(jié)果包含了第一次查詢中未出現(xiàn)的數(shù)據(jù)或者缺少了第一次查詢中出現(xiàn)的數(shù)據(jù)
?
例如:系統(tǒng)管理員A將數(shù)據(jù)庫中所有學(xué)生的成績(jī)從具體分?jǐn)?shù)改為ABCDE等級(jí),但是系統(tǒng)管理員B就在這個(gè)時(shí)候插入了一條具體分?jǐn)?shù)的記錄,當(dāng)系統(tǒng)管理員A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來,就好像發(fā)生了幻覺一樣。這就叫幻讀。
?
事務(wù)的隔離級(jí)別:
以上的4種問題(更新丟失、臟讀、不可重復(fù)讀、幻讀)都和事務(wù)的隔離級(jí)別有關(guān)。通過設(shè)置事務(wù)的隔離級(jí)別,可以避免上述問題的發(fā)生。
?
未授權(quán)讀取級(jí)別:
?
也稱為讀未提交(Read Uncommitted)。
?
以操作同一行數(shù)據(jù)為前提,讀事務(wù)允許其他讀事務(wù)和寫事務(wù),未提交的寫事務(wù)禁止其他寫事務(wù)(但允許其他讀事務(wù))。
?
此隔離級(jí)別可以防止更新丟失,但不能防止臟讀、不可重復(fù)讀、幻讀。
?
此隔離級(jí)別可以通過“排他寫鎖”實(shí)現(xiàn)。
?
授權(quán)讀取級(jí)別:
?
也稱為讀提交(Read Committed)。
?
以操作同一行數(shù)據(jù)為前提,讀事務(wù)允許其他讀事務(wù)和寫事務(wù),未提交的寫事務(wù)禁止其他讀事務(wù)和寫事務(wù)。
?
此隔離級(jí)別可以防止更新丟失、臟讀,但不能防止不可重復(fù)讀、幻讀。
?
此隔離級(jí)別可以通過“瞬間共享讀鎖”和“排他寫鎖”實(shí)現(xiàn)。
?
可重復(fù)讀取級(jí)別:
?
可重復(fù)讀?。≧epeatable Read)。
?
以操作同一行數(shù)據(jù)為前提,讀事務(wù)禁止其他寫事務(wù)(但允許其他讀事務(wù)),未提交的寫事務(wù)禁止其他讀事務(wù)和寫事務(wù)。
?
此隔離級(jí)別可以防止更新丟失、臟讀、不可重復(fù)讀,但不能防止幻讀。
?
此隔離級(jí)別可以通過“共享讀鎖”和“排他寫鎖”實(shí)現(xiàn)。
?
序列化級(jí)別:
?
序列化(Serializable)。
?
提供嚴(yán)格的事務(wù)隔離。它要求事務(wù)序列化執(zhí)行,事務(wù)只能一個(gè)接著一個(gè)地執(zhí)行,不能并發(fā)執(zhí)行。
?
此隔離級(jí)別可以防止更新丟失、臟讀、不可重復(fù)讀、幻讀。
?
如果僅僅通過“行級(jí)鎖”是無法實(shí)現(xiàn)事務(wù)序列化的,必須通過其他機(jī)制保證新插入的數(shù)據(jù)不會(huì)被剛執(zhí)行查詢操作的事務(wù)訪問到。
?
隔離級(jí)別越高,越能保證數(shù)據(jù)的完整性和一致性,但是對(duì)并發(fā)性能的影響也越大。對(duì)于多數(shù)應(yīng)用程序,可以優(yōu)先考慮把數(shù)據(jù)庫系統(tǒng)的隔離級(jí)別設(shè)為Read Committed。它能夠避免更新丟失、臟讀,而且具有較好的并發(fā)性能。盡管它會(huì)導(dǎo)致不可重復(fù)讀、幻讀這些并發(fā)問題,在可能出現(xiàn)這類問題的個(gè)別場(chǎng)合,可以由應(yīng)用程序采用悲觀鎖或樂觀鎖來控制。文章來源地址http://www.zghlxwxcb.cn/news/detail-678811.html
到了這里,關(guān)于數(shù)據(jù)庫事務(wù)四大特性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!