資料庫事務的四大特徵(簡稱acid):
1. 原子性(atomicity)
原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。簡單講就是事務裡的人物不可分割,要麼全成功執行,要麼都不執行。
2. 一致性(consistency)
一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。
拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,那麼不管a和b之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是5000,這就是事務的一致性。
3. 隔離性(isolation)
隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。
即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。
關於事務的隔離性資料庫提供了多種隔離級別,稍後會介紹到。
4.永續性(durability)
永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。
如果不進行事務的隔離設定,在多執行緒的執行的情況下就可能出錯,包括:
髒讀不可重複讀幻讀
現在來看看mysql資料庫為我們提供的四種隔離級別,其隔離級別依次增強,級別越高,執行的效率越低。他們對應著行鎖,表鎖等
1.read uncommitted (讀未提交):最低級別,任何情況都無法保證。
2. read committed (讀已提交):可避免髒讀的發生。
3. repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。
4. serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。
在mysql資料庫中檢視當前事務的隔離級別:
select @@tx_isolation;
在mysql資料庫中設定事務的隔離 級別:
set [glogal | session] transaction isolation level 隔離級別名稱;
set tx_isolation=』隔離級別名稱;』
後記:隔離級別的設定只對當前鏈結有效。對於使用mysql命令視窗而言,乙個視窗就相當於乙個鏈結,當前視窗設定的隔離級別只對當前視窗中的事務有效;對於jdbc運算元據庫來說,乙個connection物件相當於乙個鏈結,而對於connection物件設定的隔離級別只對該connection物件有效,與其他鏈結connection物件無關。
資料庫事務 四大特性 隔離級別
以下引用自 原子性 atomicity 乙個事務要麼全部執行,要麼不執行 一致性 consistency 事務的執行並不改變資料庫中資料的一致性。例如,完整性約束了a b 10,乙個事務改變了a,那麼b也隨之改變 拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,那麼不管a和b之間如何...
資料庫事務四大特性 隔離級別
要熟悉事務之前我們先了解一下sql 概念 事務就是一組dml語句組成,這些語句在邏輯上存在關聯性,有要麼全部成功,要麼全部失敗。1 原子性 乙個事務是乙個不可分割的整體,為了保證事務的總體目標,事務必須具有原子性,即當資料修改時,要麼全部執行,要麼全部不執行。即,不允許事務部分的完成,避免了只執行這...
資料庫事務四大特性 隔離級別
以轉賬為例 事務是指滿足acid的一組操作,可以通過commit提交乙個事務,也可以使用rollback進行回滾。1.原子性 atomicity 事務被視為不可分割的最小單元,事務的所有操作要麼全部提交成功,要麼全部失敗回滾。2.一致性 consisitency 資料庫在事務執行前後都保持一致性狀態...