数据库事务隔离级别(转)
2019獨角獸企業重金招聘Python工程師標準>>>
一,事務的4個基本特征
Atomic(原子性):
事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要
么全部成功,要么全部失敗。
Consistency(一致性):
只有合法的數據可以被寫入數據庫,否則事務應該將其回滾到最初
狀態。
Isolation(隔離性):
事務允許多個用戶對同一個數據進行并發訪問,而不破壞數據的正
確性和完整性。同時,并行事務的修改必須與其他并行事務的修改
相互獨立。
Durability(持久性):
事務結束后,事務處理的結果必須能夠得到固化。
以上屬于廢話
二,為什么需要對事務并發控制
如果不對事務進行并發控制,我們看看數據庫并發操作是會有那些異常情形
Lost update:
兩個事務都同時更新一行數據,但是第二個事務卻中途失敗退出,
導致對數據的兩個修改都失效了。
Dirty Reads:
一個事務開始讀取了某行數據,但是另外一個事務已經更新了此數
據但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作
都被回滾。
Non-repeatable Reads:
一個事務對同一行數據重復讀取兩次,但是卻得到了不同的結果。
Second lost updates problem:
無法重復讀取的特例。有兩個并發事務同時讀取同一行數據,然后其
中一個對它進行修改提交,而另一個也進行了修改提交。這就會造成
第一次寫操作失效。
Phantom Reads:
事務在操作過程中進行兩次查詢,第二次查詢的結果包含了第一次查
詢中未出現的數據(這里并不要求兩次查詢的SQL語句相同)。這是
因為在兩次查詢過程中有另外一個事務插入數據造成的。
三, 數據庫的隔離級別
為了兼顧并發效率和異常控制,在標準SQL規范中,定義了4個事務隔
離級別,(ORACLE和SQLSERER對標準隔離級別有不同的實現 )
Read Uncommitted:
直譯就是"讀未提交",意思就是即使一個更新語句沒有提交,但是別
的事務可以讀到這個改變.這是很不安全的.
Read Committed:
直譯就是"讀提交",意思就是語句提交以后即執行了COMMIT以后
別的事務就能讀到這個改變.
Repeatable Read:
直譯就是"可以重復讀",這是說在同一個事務里面先后執行同一個
查詢語句的時候,得到的結果是一樣的.
Serializable:
直譯就是"序列化",意思是說這個事務執行的時候不允許別的事務
并發執行.
四,隔離級別對并發的控制
下表是各隔離級別對各種異常的控制能力:
?
?
| ? | LU | DR | NRR | SLU | PR |
| RU | N | Y | Y | Y | Y |
| RC | N | N | Y | Y | Y |
| RR | N | N | N | N | Y |
| S | N | N | N | N | N |
轉載于:https://my.oschina.net/pangzhuzhu/blog/327024
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的数据库事务隔离级别(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统下UDP发送和接收广播消息
- 下一篇: hashmap 循环取出所有值 取出特定