資料庫事務及隔離級別

2021-08-24 18:13:39 字數 2017 閱讀 9507

1資料庫四大特性:

資料庫具有事務安全性,同時也具有acid四大特性:原子性、一致性、隔離性、永續性

⑴ 原子性(atomicity)

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

⑵ 一致性(consistency)

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

拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,那麼不管a和b之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是5000,這就是事務的一致性。

⑶ 隔離性(isolation)

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

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

關於事務的隔離性資料庫提供了多種隔離級別,稍後會介紹到。

⑷ 永續性(durability)

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

2無隔離性產生的問題:

當資料庫事務不具有隔離性時,此時如果有多個事務對資料庫中的資料進行讀取操作時,可能存在對資料庫中同一資料進行操作,此時就會產生讀取一些問題,主要有以下3個讀取問題:

(1)髒讀:髒讀指的是有多個事務對資料庫進行操作時,如果此時有乙個事務對一條資料進行了修改,並且此時該事務還沒有進行事務提交,此時另外乙個事務正好也對該條資料進行讀取,第一次讀取時假如資料是a,但由於被另外乙個事務修改為了b,當這個事務再次讀取這個資料時發現是b,與第一次讀取的該資料的值不一樣。這樣就是產生了髒讀。

髒讀的特點是:多個事務對同一條記錄進行了操作,其中有事務對該記錄進行了修改,但沒有完成事務提交操作,此時其它事務對該記錄進行了讀取,多次讀取資料值不一樣。

(3)不可重複讀:指的是多個事務對同一資料記錄進行了操作,其中有事務t1對該記錄進行讀取時讀取到乙個值,當事務t1讀取完成後,此時另外乙個事務t2對該記錄進行修改並且進行了事務提交,當食物t1再次讀取該記錄時發現與上次讀取到的資料值不一樣。

髒讀與不可重複讀的區別是:髒讀中對資料修改的事務並沒有進行事務提交,會進行事務的回滾操作,而不可重複讀對資料進行修改的事務對事務進行了提交,最後讀取的資料是最後的資料。

(4)虛讀(幻讀):幻讀指的是在多個事務進行併發執行時,乙個事務t1對資料庫表的一行資料都進行了相同的修改,例如對某行資料都為1的記錄都修改為了2,並且進行了事務提交,而之後另外乙個事務t2又從新在該行中新增乙個資料為1,當剛才操作事務t1的使用者如果對該行記錄進行檢視時發現有乙個記錄沒有發生改變,就像產生了幻覺一樣,這就造成了幻讀。

3.髒讀、不可重複讀、幻讀的區別:

髒讀中對資料進行修改的事務進行了事務提交,而不可重複讀和幻讀對資料修改的事務沒有進行提交,同時髒讀、不可重複讀都是對一條記錄資料的讀取問題,而幻讀指的是對一行資料進行讀取。

4.資料庫的隔離級別

(1)serializable(序列化):可避免髒讀、不可重複讀、幻讀

(2)repeatable read(可重複讀):可避免髒讀、不可重複讀的問題發生

(3)read commited(讀已提交):可避免髒讀的問題的發生

(4)read uncommited(讀未提交):最低級別,任何讀的問題無法保證避免。

對於mysql而言預設的隔離級別為 repeatedable read(可重複度),可以避免髒讀、不可重複讀上面serializable級別最高,read uncommited級別最低,但級別越高對資料的讀取就越慢,對於seriablizable而言是對這個資料庫表加鎖,鎖的粒度是整張表,即乙個事務獲取到鎖對資料庫某個資料表進行操作時其它事務必須等待該事務完成操作後釋放鎖才能執行。

資料庫事務及隔離級別

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...

資料庫事務及隔離級別

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