天天看點

事務的特性、隔離級别和并發問題1.事務的特性ACID2.并發通路問題----由隔離性引起3.事務的隔離級别4.總結/概念

事務的特性、隔離級别和并發問題

  • 1.事務的特性ACID
  • 2.并發通路問題----由隔離性引起
  • 3.事務的隔離級别
  • 4.總結/概念

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.總結/概念

  1. 事務的特性:ACID
  2. 并發問題:髒讀、不可重讀、虛讀\幻讀
  3. 解決并發:設定隔離級别
    • read uncommitted
    • read committed (oracle、sql server、postgresql 預設的)
    • repeatable read (mysql預設)
    • serialazable
  4. 隔離級别的性能:read uncommitted>read committed>repeatable read>serialazable
  5. 安全性:read uncommitted<read committed<repeatable read<serialazable