Oracle事务的隔离
事務(wù)是指一些列操作的集合,它有4個屬性:原子性(Automacity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),這4個屬性簡稱為ACID。原子性指事務(wù)是一個整體的工作單元,要么全部執(zhí)行,要么全部取消;一致性指事務(wù)操作完成時,必須使所有數(shù)據(jù)保持一致狀態(tài),事務(wù)執(zhí)行成功則所有數(shù)據(jù)更新為一個新的狀態(tài),失敗則保持原來執(zhí)行前的狀態(tài);隔離性指事務(wù)在并發(fā)情況下,事務(wù)之間不會相互影響,一個事務(wù)的修改不會讓另一個事務(wù)查看到它數(shù)據(jù)的中間狀態(tài);持久性是說事務(wù)提交后,對數(shù)據(jù)的修改就永久保存到數(shù)據(jù)庫中了。
我們先看下事務(wù)不做隔離會產(chǎn)生的問題:
1、幻讀:對插入而言的。事務(wù)1查詢某張表,事務(wù)2往表里插入數(shù)據(jù),事務(wù)1重新查詢,把事務(wù)2插入的數(shù)據(jù)查出來了。
2、不可重復(fù)讀:對修改或刪除而言的。同上,事務(wù)1查詢某張表的某條記錄,事務(wù)2修改或刪除該記錄,事務(wù)1重新查詢,發(fā)現(xiàn)數(shù)據(jù)變了或沒了。
3、臟讀:對未提交回滾操作而言的。事務(wù)1修改了某張表的某條記錄,事務(wù)2查詢后事務(wù)1回滾了,事務(wù)2讀取了不存在的數(shù)據(jù)。
ANSI/ISO SQL92?標(biāo)準(zhǔn)中定義了四個隔離級別,在各隔離級別中,允許發(fā)生上述三種需要阻止的現(xiàn)象中的一種或多種:
1、讀取未提交數(shù)據(jù)(read uncommitted)
2、讀取已提交數(shù)據(jù)(read committed)
3、可重現(xiàn)的讀取(repeatable read)
4、序列化(serializable)
通過指定不同的隔離級別,可避免上述一種或多種并發(fā)問題,見下圖。
Oracle的隔離別只支持上面的2和4,1和3是不支持的。因為不支持1,所以想要臟讀都沒可能;而不支持3,要想避免不可重復(fù)讀,可以直接使用4。另外Oracle還有一種叫只讀的隔離級別,就是說該事務(wù)只支持讀取,而不能增刪改。
轉(zhuǎn)載于:https://www.cnblogs.com/wuxun1997/p/6417917.html
總結(jié)
以上是生活随笔為你收集整理的Oracle事务的隔离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVA - 11584 Partitio
- 下一篇: 设计模式——门面(外观)模式