資料庫事務四大特性和事務隔離級別

2021-09-12 12:28:21 字數 1399 閱讀 8664

資料庫的事務的四大特性(acid):

原子性(atomicity):原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾。

一致性(consistency):一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。舉個例子,事務開始前,a和b的金額總數為5000,執行事務後也還是5000。

隔離性(isolation):多個使用者併發訪問資料庫時,作業系統就為使用者開啟乙個事務,不能被事務所干擾,多個併發事務不能相互隔離。

永續性(durability):永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

資料庫併發會帶來的哪些問題?

髒讀:髒讀是指在乙個事務處理過程裡讀取了另乙個未提交的事務中的資料,這個很容易理解。

不可重複讀:不可重複讀是指在對於資料庫中的某個資料,乙個事務範圍內多次查詢卻返回了不同的資料值,這是由於在查詢間隔,被另乙個事務修改並提交了。(這個是針對資料庫的行來說),不可重複讀和髒讀的區別是,髒讀是某一事務讀取了另乙個事務未提交的髒資料,而不可重複讀則是讀取了前一事務提交的資料。

幻讀:例如事務t1對乙個表中所有的行的某個資料項做了從「1」修改為「2」的操作,這時事務t2又對這個表中插入了一行資料項,而這個資料項的數值還是為「1」並且提交給資料庫。而操作事務t1的使用者如果再檢視剛剛修改的資料,會發現還有一行沒有修改,其實這行是從事務t2中新增的,就好像產生幻覺一樣,這就是發生了幻讀。

注意:幻讀和不可重複讀都是讀取了另一條已經提交的事務(這點就髒讀不同),所不同的是不可重複讀查詢的都是同乙個資料項,而幻讀針對的是一批資料整體(比如資料的個數)。幻讀是針對每次查詢都會多幾行或者少幾行,針對的是表,而不可重複讀針對的是行,也就是修改資料庫某一行的資料。

不可重複讀與幻讀的區分:

事務的隔離級別(等級以此往下遞增)

1.read uncommitted(讀未提交):最低等級,任何情況都無法保證。

2.read committed(讀已提交):可避免髒讀的發生。

3.repeatable read(可重複讀):可避免髒讀,不可重複讀的發生。

4.serializable(可序列化):可避免髒讀,不可重複讀,幻讀的發生。

其實我們也可以思考下,mysql要在怎麼樣的條件可以避免幻讀呢? 如果把mysql的預設行鎖改為表鎖,那麼就可以不用採用這個序列化的隔離級別就避免的幻讀。,但不利於併發。

資料庫事務的四大特性和事務隔離級別

reference 1 2 如果乙個資料庫聲稱支援事務的操作,那麼該資料庫必須要具備以下四個特性 原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。一致性是指...

資料庫事務 四大特性 隔離級別

以下引用自 原子性 atomicity 乙個事務要麼全部執行,要麼不執行 一致性 consistency 事務的執行並不改變資料庫中資料的一致性。例如,完整性約束了a b 10,乙個事務改變了a,那麼b也隨之改變 拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,那麼不管a和b之間如何...

資料庫事務四大特性 隔離級別

要熟悉事務之前我們先了解一下sql 概念 事務就是一組dml語句組成,這些語句在邏輯上存在關聯性,有要麼全部成功,要麼全部失敗。1 原子性 乙個事務是乙個不可分割的整體,為了保證事務的總體目標,事務必須具有原子性,即當資料修改時,要麼全部執行,要麼全部不執行。即,不允許事務部分的完成,避免了只執行這...