事務是應用程式中一系列嚴密的操作,所有操作必須一起成功完成,否則在每個操作中進行的更改都會被撤銷。
事務具有四個特徵:
1.原子性(atomicity):事務是資料庫的邏輯工作單位,事務中包含的各操作要麼都完成,要麼都不完成。
2.一致性(consistency):事務執行的結果必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態,對於整個資料的完整性保持穩定。
3.隔離性(isolation):事務與事務之間互不干擾,即乙個事務內部的操作及使用的資料對其它並行事務是隔離的。
4.永續性(durability):事務一旦提交,對資料庫中的資料更改就是永久性的。
在併發處理資料時,所採取的資料隔離機制。
若沒有採用有效的隔離機制,併發處理資料時會出現以下問題:
1.第一類丟失更新:撤銷乙個事務時,把其它事務已提交的更新資料覆蓋。
2.髒讀:乙個事務處理過程中讀取了另乙個未提交的事務中的資料。
3.幻讀:也叫虛讀,乙個事務執行兩次查詢,第二次結果集包含第一次沒有或某些行已經被刪除的資料,造成兩次結果不一致,這是另乙個事務在這兩次查詢中間插入或刪除了資料造成的。
4.不可重複讀:乙個事務兩次讀取同一行的資料,結果得到不同狀態的結果,中間正好另乙個事務更新了資料。
5.第二類丟失更新:是不可重複讀的特殊情況,如果兩個事務都讀取同一行,然後兩個都進行寫操作,並提交,第乙個事務所做的改變就會丟失。
注意:不可重複讀和髒讀的區別是:髒讀是某一事務讀取了另乙個事務未提交的髒資料,不可重複讀則是讀取了前一事務提交的資料。
不可重複讀和幻讀的區別是:幻讀和不可重複讀都是讀取了另一條已經提交的記錄,所不同的是不可重複度查詢的是同一資料項,而幻讀針對的是一批資料整體(比如資料的個數)。
事務的隔離級別有四種,
1.read uncommitted(最低級別,任何情況都無法保證)
讀未提交,顧明思義,就是乙個事務可以讀取另乙個未提交事務的資料。
會有髒讀的情況。
2.read committed(可避免髒讀的傳送)
讀提交,顧名思義,就是乙個事務要等另乙個事務提交後才能讀取資料。
會出現不可重複讀問題。
3.repeatable read(可避免髒讀、不可重複讀的傳送)
重複讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作。
會出現幻讀的情況。
4.serializable(可避免髒讀、不可重複讀、幻讀的傳送)
序列化,是最高的事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀、不可重複讀與幻讀。但是這種事務隔離級別效率低下,比較耗資料庫效能,一般不使用。
大多數資料庫預設的事務隔離級別是read committed,比如sql server和oracle。
mysql預設的隔離級別是repeatable read。
隔離級別的設定只對當前連線有效,對於使用mysql命令視窗而言,乙個視窗相當於乙個鏈結;對於jdbc運算元據庫來說,乙個connection物件相當於乙個鏈結。
設定資料庫隔離級別一定是要在開啟事務之前。
事務ACID屬性與隔離級別
資料庫領域中的事務指的是一系列對資料庫的操作集合,是資料庫管理系統 dbms 定義的乙個執行單位。事務的作用體現在兩個方面 當然以上兩條是事務理論上應該持有的特性,但是實際應用過程中,由於業務需求的不同或配置方式不同,事務對以上兩個方面的滿足程度也不盡相同。事務是 dbms 定義的乙個邏輯概念,其作...
事務的ACID特性與隔離級別
事務所提供的安全保證,通常由眾所周知的首字母縮略詞acid來描述,acid代表原子性 atomicity 一致性 consistency 隔離性 isolation 和永續性 durability 乙個事務是乙個不可分割的工作單位,其中的操作要麼都做,要麼都不做。特徵是能夠在錯誤時終止事務,丟棄該事...
事務的特性ACID 隔離級別
1.事務特性acid 1.1 事務的四大特性 1 原子性 atomicity 事務包裝的一組sql,要麼都執行成功,要麼都失敗。這些操作是不可分割的。2 一致性 consistency 資料庫的資料狀態是一致的。3 永續性 durability 事務成功提交之後,對於資料庫的改變是永久的。哪怕資料庫...