事務的4個特性及4個隔離級別


轉載處:https://www.cnblogs.com/lztkdr/p/Transaction.html

1.事務的特性ACID

1)原子性(Atomicity)原子性是指事務是一個不可分割的工作單位,事務中的操作要么都發生,要么都不發生。 

2)一致性(Consistency)一個事務中,事務前后數據的完整性必須保持一致。

 3)隔離性(Isolation)多個事務,事務的隔離性是指多個用戶並發訪問數據庫時, 一個用戶的 事務不能被其它用戶的事務所干擾,多個並發事務之間數據要相互隔離。

4)持久性(Durability)持久性是指一個事務一旦被提交,它對數據庫中數據的改變 就是永久性的,接下來即使數據庫發生故障也不應該對其有任何影響。

2.並發訪問問題----由隔離性引起

如果不考慮隔離性,事務存在3中並發訪問問題。

1)臟讀:B事務讀取到了A事務尚未提交的數據   ------  要求B事務要讀取A事 務提交的數據

2)不可重復讀:一個事務中 兩次讀取的數據的內容不一致  ----- 要求的是一個事 務中多次讀取時數據是一致的  --- unpdate

3)幻讀/虛讀:一個事務中 兩次讀取的數據的數量不一致  ----- 要求在一個事務多 次讀取的數據的數量是一致的 --insert  delete

3.事務的隔離級別

1)read uncommitted : 讀取尚未提交的數據 :哪個問題都不能解決

2)read committed:讀取已經提交的數據 :可以解決臟讀 ---- oracle、sql server、postgresql 默認的

3)repeatable read:重讀讀取:可以解決臟讀 和 不可重復讀 ---mysql默認的

4)serializable:串行化:可以解決 臟讀 不可重復讀 和 虛讀---相當於鎖表

4.總結/概念

       事務的特性:ACID

                       並發問題:臟讀、不可重讀、虛讀\幻讀

                       解決並發:設置隔離級別

                             read uncommitted

                             read committed  (oracle、sql server、postgresql 默認的)

                             repeatable read (mysql默認)

                             serialazable 

                       隔離級別的性能:

                             read uncommitted>read committed>repeatable read>serialazable

                       安全性:

                             read uncommitted<read committed<repeatable read<serialazable


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM