對事務的理解

2021-09-26 23:07:46 字數 2170 閱讀 1437

事務:為了實現某個功能而組合在一起的一組sql語句,這組sql語句要麼全執行,要麼全不執行

例:張三要給李四轉100塊錢,那麼如果轉錢成功的話,張三的賬戶會少100,而李四的賬戶會多100;否則張三和李四的賬戶餘額仍保持不變。

事務有四大特性(簡稱為acid特性):原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)

原子性:事務中的這組sql語句要麼全執行,要麼全不執行【基本概念】

一致性:該事務提交後要使資料庫從乙個一致性狀態變成另乙個一致性狀態。還是上邊提到的轉賬的例子。假如執行該事務前張三和李四的餘額分別為1000,900。那麼成功執行張三向李四轉賬100這個事務後,張三和李四的餘額分別變為900,1000【保證了資料庫的一致性】。但是如果執行完該事務之後張三的餘額變成了900,而李四的餘額還是900,說明給李四賬戶加100的sql語句沒有執行成功,此時資料庫就處於不一致狀態。而要保證資料庫的一致性,該事務的所有sql語句都要成功執行,說明一致性跟原子性是分不開的。【簡單來說就是,事務提交前後,資料的總額一致】

隔離性:各事務的執行互相沒有干擾。

永續性:乙個事務提交之後對資料庫的修改是持久的。

四個隔離級別:讀未提交、讀已提交、可重複讀、可序列化

讀未提交:顧名思義,就是乙個事務可以讀取另乙個還未提交事務的資料。可能會導致髒讀

髒讀:事務a正在訪問乙個資料,並且對這個資料做了修改,但是這種修改還沒有提交到資料庫中。此時事務b訪問並使用了此資料。由於對該資料的修改還沒有提交,所以我們稱此時b讀的資料為臟資料。【簡單來說就是,事務b讀取了事務a還未提交的資料】

例:1.mary的原工資為1000, 財務人員將mary的工資改為了8000(但未提交事務)

2.mary讀取自己的工資 ,發現自己的工資變為了8000,歡天喜地!

3.而財務發現操作有誤,回滾了事務,mary的工資又變為了1000

像這樣,mary讀取的工資數8000就是乙個髒資料。

分析:雖然mary看到自己的工資是8000,但實際mary的工資還是1000。由於他看到的是事務還沒提交時的資料,所以這種資料就是髒資料-->髒讀

解決髒讀:讀已提交

讀已提交:乙個事務要等待另乙個事務提交後才能讀取資料。可能會導致不可重複讀

不可重複讀:在乙個事務內,多次讀同一資料。但是在這個事務還沒執行結束時,另乙個事務也訪問並修改了此資料。那麼在第乙個事務的兩次讀資料之間,由於第二個事務的修改,可能導致第乙個事務兩次讀的資料不一樣。這種發生了 在乙個事務內 連續兩次讀到的資料不一樣的情況稱為不可重複讀。【簡單來說就是,同乙個事務內,兩次讀的資料內容不一樣】

例:1.在事務1中,mary 讀取了自己的工資為1000,操作並沒有完成

2.在事務2中,這時財務人員修改了mary的工資為2000,並提交了事務.

3.在事務1中,mary 再次讀取自己的工資時,工資變為了2000

分析:在事務1第一次讀完資料之後,此時由於事務2對資料進行了更新操作,而讀事務要等待這個更新操作事務提交後才能讀取資料,可以解決髒讀。但是由於事務1前後兩次查詢的結果不一樣,這種情況就是不可重複讀

解決不可重複讀:可重複讀

可重複讀:一旦事務開啟,當該事務第一次讀取資料之後,此時即使有其它事務對該資料做了修改,在該事務第二次讀取資料的時候仍然可以保證讀到的資料跟第一次一樣。 由於可重複讀只能保證不允許其他事務的update操作,但是沒***不允許其他事務的insert操作,所以可能會導致幻讀。

幻讀:乙個事務先後讀取乙個範圍的記錄,但兩次讀到的記錄數不一樣,稱為幻讀。比如新增或刪除了某些記錄導致該範圍的記錄數發生改變。【簡單來說就是,同乙個事務內,兩次讀到的記錄數不一樣,要麼多了,要麼少了】

例:目前工資為1000的員工有10人。

1.事務1,讀取所有工資為1000的員工。

2.這時事務2向employee表插入了一條員工記錄,工資也為1000

3.事務1再次讀取所有工資為1000的員工 共讀取到了11條記錄【事務1兩次讀到的記錄數不一樣】

解決幻讀:可序列化

可序列化:事務序列化順序執行,可避免髒讀、不可重複讀,和幻讀。但是這種事務隔離級別效率低下,比較耗資料庫效能,一般不使用。

注:mysql預設隔離級別為可重複讀

對事務的理解

事務 transaction 是訪問並可能更新資料庫中各種資料項的乙個程式執行單元.事務的四個屬性 原子性atomicity 乙個事務是乙個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做.一致性consistency 事務必須是使資料庫從乙個一致性狀態到另乙個一致性狀態.一致性與原子性是...

對事務的理解

概念 事務是一系列的動作,這些動作必須全部完成,如果有乙個失敗的話,那麼事務就會回滾到最開始的狀態。作用就是用來確保資料的完整性和一致性。事務的四個特性 acid 原子性 atomicity 事務是乙個原子操作,有一系列動作組成。事務的原子性確保動作要麼全部完成,要麼完全不起作用。一致性 consi...

對事務的深入理解

1.事務是對一系列動作的組合 2.事務是對一系列動作的組合 3.事務是對一系列動作的組合 4.事務是對一系列動作的組合,要麼全都成功,要麼全都失敗回滾 5.事務是對一系列動作的組合,要麼全都成功,要麼全都失敗回滾 6.事務是對一系列動作的組合,要麼全都成功,要麼全都失敗回滾 7.隔離性 isolat...