1. 程式人生 > >數據庫 : 事物以及隔離性導致的問題

數據庫 : 事物以及隔離性導致的問題

read mit eat 幻讀 另一個 tab 隔離級別 zab date

事務的特性:

原子性: 事務不可分割
一致性: 事務執行前後數據完整性保持一致
隔離性: 一個事務的執行不能受到其他事務的幹擾
持久性: 一旦事務結束, 數據就持久化到數據庫
----------------------------------------------------------------------------------------------------
隔離性引發的安全問題:
讀:
臟讀: 一個事物讀到另一個事物未提交的數據
不可重復讀: 一個數據讀到另一個事物已經提交(update)的數據, 導致一次事物中多次查詢的結果不一致
虛讀, 幻讀: 一個事物讀到另一個事物已經提交(insert)的數據,導致一個事務中多次查詢結果不一致
寫:
丟失更新: 並發修改導致的一個事物更新的數據被另一個事物更新之後沖掉
--------------------------------------------------------------------------------------------------------------
解決讀問題: 設置事物隔離級別:
Read uncommitted: 未提交讀
Read committed: 只能解決臟讀 (oracle默認)
Repeatable read: 解決臟讀和不可重復讀, 可能發生虛讀 (mysql默認)
Serializable: 所有讀問題都可以解決, 但是效率太低

數據庫 : 事物以及隔離性導致的問題