Oracle学习:事务的隔离级别
一、并發問題的產生
對于同時運行的多個事務,當這些事務訪問數據庫中相同的數據時,如果沒有采取必要的隔離機制,就會導致以下各種并發問題:
(1) 臟讀:對于兩個事物 T1,T2。T1 讀取了已經被 T2 更新但還沒有被提交的字段,之后,若 T2 回滾,T1 讀取的內容就是臨時且無效的。
(2)不可重復讀:
T1 讀取一個字段,然后 T2 更新了該字段,之后,T1 再次讀取同一個字段,值就不同了。
(3)幻讀:
T1 從一個表中讀取了一個字段,然后 T2 在該表中插入了一些新的行,之后,如果 T1 再次讀取同一個表,就會多出幾行。
數據庫事務的隔離性:數據庫系統必須具有“隔離并發運行各個事務”的能力,使它們不會相互影響,避免各種并發問題。
二、隔離級別
(1) 一個事務與其他事務隔離的程度稱為隔離級別
數據庫規定了多種事務隔離級別,不同隔離級別對應不同的干擾程度,隔離級別越高,數據一致性就越好, 但并發性越弱 , 類似于 Linux 中的互斥鎖。
(2)4種隔離級別:
1、 Read Uncommitted 讀未提交數據 – 未隔離;
2、Read Commited 讀已提交數據 – 不提交,其他事務沒法讀(Oracle 默認);
3、Repeatable Read 可重復讀 – 不提交,其他事務也可讀 (MySQL 默認);
4、Serializable 序列化、串行化 (查詢也要等前一個事務結束)。
Oracle 支持的隔離級別: Read Commited(默認)和 Serializable以及 Oracle 自定義的 Read Only 三種。
其中Read Only意思為:由于大多數情況下,在事務操作的過程中,不希望別人也來操作,但是如果將別人的隔離級別設置為 Serializable(串行),但是單線程會導致數據庫的性能太差。是應該允許別人來進行 read操作的。
總結
以上是生活随笔為你收集整理的Oracle学习:事务的隔离级别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 事务的控制(保存点)
- 下一篇: Oracle学习:表的创建、修改、重命名