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

資料庫 : 事物以及隔離性導致的問題

事務的特性:

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