事務的四大特征
原子性
原子性是指事務包含的所有操作要么全部成功,要么全部失敗回滾,
一致性
一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之后都必須處于一致性狀態,
隔離性
隔離性是當多個用戶并發訪問資料庫時,比如操作同一張表時,資料庫為每一個用戶開啟的事務,不能被其他事務的操作所干擾,多個并發事務之間要相互隔離,
持久性
持久性是指一個事務一旦被提交了,那么對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作,
資料庫事務隔離級別
| 隔離級別 | 臟讀 | 不可重復讀 | 幻讀 |
|---|---|---|---|
| Read Uncommitted | √ | √ | √ |
| Read Committed | x | √ | √ |
| Repeatable Read | x | x | √ |
| Serializable(降低并發行) | x | x | x |
臟讀、不可重復讀、幻讀
臟讀: 是指在一個事務處理程序里讀取了另一個未提交的事務中的資料,
個人理解
事務在執行時遇到例外可能會發生回滾,假設有這樣的一個場景,當一個事務中有兩個sql,第一個sql修改了某一個屬性,但是事務并沒有執行結束,這時另一個人訪問了這個屬性,會發生一種情況就是可以查到修改后的屬性,這時如果在上面的第一個sql下面出現了例外,那么事務將會回滾,屬性變回原本的屬性,所以第二個人讀到的資料就是臟讀,
原本有100塊錢,然后去提款機存錢,存了1000元,但是銀行停電了,這個事務需要回滾,在回滾之前和存款之后有一個人查詢了賬號余額是1100這就是臟讀,
不可重復讀:(重點是修改)
個人理解
兩個事務中,當一個事務在第一次查詢的時候,得到一個結果,還沒對這個結果進行處理,這時另一個事務來修改了第一個事務的值,導致第一個事務對接下來的邏輯處理會產生錯誤,這就是不可重復讀,
幻讀:(重點是新增或洗掉)
個人理解
兩個事務中,當事務A先訪問資料庫有10條資料,這是事務B在資料庫中添加了一條資料,當事務A再去查看的時候,發現查到了11條資料,感覺產生了幻覺,這就是幻讀,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/203870.html
標籤:其他
