1. 程式人生 > >資料庫事務隔離級別,及髒讀,幻讀,虛讀

資料庫事務隔離級別,及髒讀,幻讀,虛讀

轉載:http://blog.csdn.net/u013474436/article/details/53437220

事務的特性:

  • 原子性:指處於同一個事務中的多條語句是不可分割的。
  • 一致性:事務必須使資料庫從一個一致性狀態變換到另外一個一致性狀態。比如轉賬,轉賬前兩個賬戶餘額之和為2k,轉賬之後也應該是2K。
  • 隔離性:指多執行緒環境下,一個執行緒中的事務不能被其他執行緒中的事務打擾
  • 永續性:事務一旦提交,就應該被永久儲存起來。

事務隔離性問題: 
如果不考慮事務的隔離性,會出現以下問題:

  • 髒讀:指一個執行緒中的事務讀取到了另外一個執行緒中未提交的資料。
  • 不可重複讀(虛讀):指一個執行緒中的事務讀取到了另外一個執行緒中提交的update的資料。
  • 幻讀:指一個執行緒中的事務讀取到了另外一個執行緒中提交的insert的資料。

隔離級別:

隔離級別 髒讀(Dirty Read) 不可重複讀(NonRepeatable Read) 幻讀(Phantom Read)
未提交讀(Read uncommitted) 可能 可能 可能
已提交讀(Read committed) 不可能 可能 可能
可重複讀(Repeatable read) 不可能 不可能 可能
可序列化(Serializable ) 不可能 不可能 不可能

級別越高,資料越安全,但效能越低。

不可重複讀與幻讀比較相似,都是在一個事務中多次讀取到不同的資料。網路上的總結如下: 
不可重複讀:所謂的虛讀,也就是大家經常說的不可重複讀,是指在資料庫訪問中,一個事務範圍內兩個相同的查詢卻返回了不同資料。這是由於查詢時系統中其他事務修改的提交而引起的。比如事務T1讀取某一資料,事務T2讀取並修改了該資料,T1為了對讀取值進行檢驗而再次讀取該資料,便得到了不同的結果。 
一種更易理解的說法是:在一個事務內,多次讀同一個資料。在這個事務還沒有結束時,另 一個事務也訪問該同一資料。那麼,在第一個事務的兩次讀資料之間。由於第二個事務的修改,那麼第一個事務讀到的資料可能不一樣,這樣就發生了在一個事務內 兩次讀到的資料是不一樣的,因此稱為不可重複讀,即原始讀取不可重複。 
所謂幻讀,是指事務A讀取與搜尋條件相匹配的若干行。事務B以插入或刪除行等方式來修改事務A的結果集,然後再提交。 
幻讀是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的資料進行了修改,比如這種修改涉及到表中的“全部資料行”。同時,第二個事務也 修改這個表中的資料,這種修改是向表中插入“一行新資料”。那麼,以後就會發生操作第一個事務的使用者發現表中還有沒有修改的資料行,就好象發生了幻覺一 樣.一般解決幻讀的方法是增加範圍鎖RangeS,鎖定檢鎖範圍為只讀,這樣就避免了幻讀。簡單來說,幻讀是由插入或者刪除引起的。 
大致的區別在於不可重複讀是由於另一個事務對資料的更改所造成的,而幻讀是由於另一個事務插入或刪除引起的。

不可重複讀(虛讀)和幻讀的差別: 
從總的結果來看, 似乎兩者都表現為兩次讀取的結果不一致. 
但如果你從控制的角度來看, 兩者的區別就比較大: 
對於前者, 只需要鎖住滿足條件的記錄 
對於後者, 要鎖住滿足條件及其相近的記錄

相關推薦

資料庫事務隔離級別

轉載:http://blog.csdn.net/u013474436/article/details/53437220 事務的特性: 原子性:指處於同一個事務中的多條語句是不可分割的。一致性:事務必須使資料庫從一個一致性狀態變換到另外一個一致性狀態。比如轉賬,轉賬前兩個

資料庫事務隔離級別、不可重複

資料庫事務的隔離級別有4個,由低到高依次為Read uncommitted 、Read committed 、Repeatable read 、Serializable  ,後面三個可以逐個解決髒讀 、不可重複讀 、幻讀 這幾類問題。 髒讀 不可重複讀 幻讀 Read u

資料庫事務隔離級別、不可重複的理解

一、資料庫事務正確執行的四個基本要素 1.1ACID原則。   ACID原則是資料庫事務正常執行的四個基本要素,分別指原子性、一致性、獨立性及永續性。   原子性(Atomicity)是指一個事務要麼全部執行,要麼不執行,也就是說一個事務不可能只執

資料庫事務隔離級別-- 、不可重複(清晰解釋)

一、資料庫事務隔離級別 資料庫事務的隔離級別有4個,由低到高依次為Read uncommitted 、Read committed 、Repeatable read 、Serializable ,這四個級別可以逐個解決髒讀 、不可重複讀 、幻讀 這幾類問題。 √: 可能出

資料庫事務隔離級別-- 、不可重複

一 、資料庫事務隔離級別 從高到低: 序列化    serilizable      消耗資源比較嚴重 重複讀    repeatable read    Oracle 預設的事務隔離級別 讀提交    read committed    Mysql 預設的隔離級別

mysql關於資料庫事務隔離級別測試(包含例項測試語句測試結果對比)

1、知識點; 事務的四大特性 ACID ;  原子性(Atomic):事務是一個整體(無論在該事務中操作任何CRUD),要不全部執行,要不全部不執行。(資料庫能夠進行操作的最小的邏輯單元) 一致性(Consistent):組成一個事務的操作是CRUD,要麼全部成功,要

理解資料庫事務隔離級別以及, 不可重複,

資料庫事務的4個特性: 原子性(atomic): 都成功或者都失敗;一致性(consistency):事務操作之後,資料庫所處的狀態和業務規則是一致的;比如a,b賬戶相互轉賬之後,總金額不變;隔離性(isolation):操作中的事務不相互影響;永續性(durability

資料庫事務隔離級別ACID,spring事務傳播性

ACID,是指在資料庫管理系統(DBMS)中事務所具有的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、永續性(Durability)。 在資料庫系統中,一個事務是指由一系列資料庫操作組成的一個完整的邏輯過程。例如銀行轉帳,從原賬戶扣除金額

資料庫事務隔離級別與鎖機制的實現----不是針對PostgreSQL而是普遍的原理來自網際網路有刪節

文章來自原文連結: 版權歸原作者所有,有刪節,只保留對我理解有幫助的部分。 事務隔離級別通過鎖的實現機制兩個鎖排他鎖: 被加鎖的物件只能被持有鎖的事務讀取和修改,其他事務無法在該物件上加其他鎖,也不能讀取和修改該物件。 共享鎖: 被加鎖的物件可以被持鎖事務讀取

針對資料庫事務隔離級別的討論期待你的參與

af8k10嗣古陀呢胖鞠《http://baobao.baidu.com/question/5b160dce5375bd9862cb9441667e517e?PL》 cxi1z6匱克壯虐刺籃《http://baobao.baidu.com/question/11766989b

遇到mysql資料庫事務隔離級別相關的小坑

幾乎所有軟體工程師都知道,mysql有4種事務隔離級別,但是實際開發過程中可能有時候忽略這個小細節,有時候可能是本來就沒有考慮過,有時候也可能是其他的原因,比如我這次踩到的小坑。 事情還原: 1、需求一:是新建一個商戶,但是客戶要求在建立商戶的時候要預設給他們開

MySQL資料庫事務隔離級別(Transaction Isolation Level)

今天在學習JDBC的時候看到了關於MySql的事務的隔離級別的問題,感覺內容挺高階的,所以記錄一篇文章,以備後面使用。 資料庫隔離級別有四種,應用《高效能mysql》一書中的說明: 然後說說修改事務隔離級別的方法: 1.全域性修改,修改mysql.in

資料庫事務隔離級別與併發產生的問題

資料庫的可序列化保證了那些可序列性的事務進行極小的併發度。同時SQL標準也規定對於不要求精確結果的長事務可以以不可序列化的方式執行。 資料庫的隔離級別有4個,由低到高依次為Read uncommitted、Read committed、Repeatable read、Se

資料庫事務隔離級別例項探討

我們知道,資料一般有如下四種隔離級別 0.  read uncommitted (讀未提交)1.  read committed (讀已提交)2.  repeatabale read (可重複讀)3.  serializable read (序列化讀) 下面通過例項介紹這

資料庫事務隔離級別測試-postgresql

1. read-committed (default 級別) 客戶端A: epmdb=> start transaction ; START TRANSACTION epmdb=> update t1.dbversion  set  value =1200  w

PG資料庫事務隔離級別

Postgres資料庫事務隔離級別介紹 0. What is Database Transaction? 資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事

資料庫事務隔離級別

√: 可能出現    ×: 不會出現 髒讀 不可重複讀 幻讀 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意:我們討論隔離級別的場景,主要是在多個事務併發的情況下,因此,接下來

資料庫:自己理解的“資料庫事務隔離級別

引言:在網上搜了很多關於事務的文章,感覺單獨來看都很難看懂,所以綜合自己的理解寫一篇我自己能理解的關於關係型資料庫事務的文章。 一、事務特徵 我們都知道資料庫事務具備ACID特性: Atomic(原子性):一個事務要麼成功,要麼失敗 Consistency(

關於資料庫事務隔離級別與鎖

 一、什麼是事務事務簡單的來說就是把對資料庫的一系列操作放到一個可控制的過程中,進行可量化的控制,事務有4個必須的屬性原則:1、原子性:必須保證在一個事務中的操作要麼全部執行,要麼全部不執行。 2、一致性:事務操作在完成時必須使資料庫保持一致的狀態,內部資料結構必須是完整的

ORACLE資料庫事務隔離級別

事務隔離級別:一個事務對資料庫的修改與並行的另一個事務的隔離程度。 兩個併發事務同時訪問資料庫表相同的行時,可能存在以下三個問題: 1、幻想讀:事務T1讀取一條指定where條件的語句,返回結果集。此時事務T2插入一行新記錄,恰好滿足T1的where條件。然後T1使用