資料庫事務及隔離級別

2022-04-06 05:32:10 字數 1914 閱讀 5085

原子性(atomicity)

原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。

一致性(consistency)

一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。

隔離性(isolation)

隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。

即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。

永續性(durability)

永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

如果不對資料庫進行併發控制,可能會產生異常情況:

髒讀(dirty read)

當乙個事務讀取其他事務尚未提交的修改時,產生髒讀。

同一事務內不是髒讀。 乙個事務開始讀取了某行資料,但是另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾,也就是說讀取出的資料其實是錯誤的。

非重複讀(nonrepeatable read)

重點在於update和delete。乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的結果。同一查詢在同一事務中多次進行,由於其他事務已提交修改或刪除,每次返回不同的結果集,此時發生非重複讀。

幻像讀(phantom reads)

重點在於insert。事務在操作過程中進行兩次查詢,第二次查詢的結果包含了第一次查詢中未出現的資料(這裡並不要求兩次查詢的sql語句相同)。這是因為在兩次查詢過程中有其他事務插入資料造成的

當對某行執行插入或刪除操作,而該行屬於某個事務正在讀取的行的範圍時,會發生幻像讀問題。

丟失修改(lost update)

第一類:當兩個事務更新相同的資料來源,如果第乙個事務被提交,第二個卻被撤銷,那麼連同第乙個事務做的更新也被撤銷。

第二類:有兩個併發事務同時讀取同一行資料,然後其中乙個對它進行修改提交,而另乙個也進行了修改提交。這就會造成第一次寫操作失效。

隔離級別包含四種:

序列化 (serializable)

直譯就是"序列化",意思是說這個事務執行的時候不允許別的事務併發執行。完全序列化的讀,每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞。

可重複讀(repeatable read):

直譯就是"可以重複讀",這是說在同乙個事務裡面先後執行同乙個查詢語句的時候,得到的結果是一樣的。

讀取已提交(read committed)

直譯就是"讀提交",意思就是乙個事務能夠讀取到其他事務已經提交的資料。oracle等多數資料庫預設都是該級別。

讀取未提交(read uncommitted)

直譯就是"讀未提交",意思就是乙個事務能夠讀取到其他事務尚未提交的資料。

隔離級別

髒讀不可重複讀

幻讀序列化 (serializable)××

×可重複讀(repeatable read)××

√讀取已提交(read committed)×√

√讀取未提交(read uncommitted)√√

參考:

資料庫事務及隔離級別

1資料庫四大特性 資料庫具有事務安全性,同時也具有acid四大特性 原子性 一致性 隔離性 永續性 原子性 atomicity 原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能...

資料庫事務及隔離級別

1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程 錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 consistency 事務開始前和...

資料庫事務及隔離級別

a.概念 b.操作 c.測試 建立賬戶表 create table account id int primary keyauto increment name varchar 10 money double 新增資料 insert into account name,money values zha...