MySQL事務(wù)的四大特性以及并發(fā)事務(wù)問題解讀
MySQL事務(wù)的四大特性以及并發(fā)事務(wù)
事務(wù)的四大特性ACID
原子性(Atomicity):
- 事務(wù)是不可分割的最小單元,要么全部成功,要么全部失敗。
- (eg:轉(zhuǎn)賬案例,轉(zhuǎn)賬過程中任何一步操作失敗了,那么整個事務(wù)就失敗了)
一致性(Consistency):
- 事務(wù)完成時,必須使所有的數(shù)據(jù)都保持一致狀態(tài)。
- (不管是事務(wù)執(zhí)行成功提交,還是事務(wù)執(zhí)行失敗回滾了,張三李四賬戶余額加起是一個恒定值。轉(zhuǎn)賬前總和6000,轉(zhuǎn)賬后不可能出現(xiàn)兩個人的賬戶總和8000)
隔離性(Isolation):
- 數(shù)據(jù)庫系統(tǒng)提供的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的獨立環(huán)境下運行。
- (隔離性是指:有并發(fā)個事務(wù),事務(wù)A、事務(wù)B同時操作數(shù)據(jù)庫,A事務(wù)在操作的時候不會影響B(tài)事務(wù)的執(zhí)行;同理B事務(wù)在操作的時候,也不會影響A事務(wù)的執(zhí)行。它們兩個事務(wù)在獨立的環(huán)境下運行的,互不影響。)
持久性(Persistence):
- 事務(wù)一旦提交或回滾,它對數(shù)據(jù)庫中的數(shù)據(jù)改變就是永久的。
- (不管是事務(wù)執(zhí)行成功提交了,還是操作異?;貪L了,它對數(shù)據(jù)庫的改變時永久的,因為數(shù)據(jù)庫的數(shù)據(jù)最終是存儲在磁盤的,那么存儲在磁盤的數(shù)據(jù)它會被永久的保留下來)
事務(wù)-并發(fā)事務(wù)問題
臟讀:一個事務(wù)讀到另一個事務(wù)還沒有提交的數(shù)據(jù)。
不可重復(fù)讀:一個事務(wù)先后讀取同一條記錄,但兩次讀取的數(shù)據(jù)不同,稱之為不可重復(fù)讀。
幻讀: 一個事務(wù)按照條件查詢事務(wù)時,沒有對應(yīng)的數(shù)據(jù)行,但是在插入數(shù)據(jù)時,又發(fā)現(xiàn)這行數(shù)據(jù)已存在,好像出現(xiàn)了幻影。
并發(fā)事務(wù)出現(xiàn)的問題-圖文描述:
臟讀:
- B事務(wù)讀取A事務(wù)修改后(update后)未提交的數(shù)據(jù);
- 事務(wù)A對id=1 的數(shù)據(jù)進(jìn)行了修改,且修改后還未提交事務(wù),此時事務(wù)B查詢id=1的數(shù)據(jù),查到的數(shù)據(jù)是事務(wù)B修改后未提交的數(shù)據(jù)。這種情況稱之為臟讀。
不可以重復(fù)讀:
- A事務(wù)一共有4個操作,第一步時查詢數(shù)據(jù)庫id=1的數(shù)據(jù),第二步執(zhí)行其他操作時,此時B事務(wù)對id=1的數(shù)據(jù)進(jìn)行修改(注:并發(fā)事務(wù)),修改后提交事務(wù)。
- A事務(wù)執(zhí)行第三步查詢id=1的數(shù)據(jù)時,和第一步查詢id=1的返回結(jié)果不一樣(因為B事務(wù)對id=1的數(shù)據(jù)進(jìn)行了修改),這種情況稱之為不可以重復(fù)讀。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Centos7下安裝MySQL8.0.23的步驟(小白入門級別)
這篇文章主要介紹了Centos7下安裝MySQL8.0.23的步驟(小白入門級別),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01mysql表優(yōu)化、分析、檢查和修復(fù)的方法詳解
這篇文章主要介紹了mysql表優(yōu)化、分析、檢查和修復(fù)的方法,結(jié)合實例形式較為詳細(xì)的分析了MySQL表進(jìn)行優(yōu)化,分析與修復(fù)等操作的各種常見命令與使用技巧,需要的朋友可以參考下2016-04-04淺談sql語句中GROUP BY 和 HAVING的使用方法
GROUP BY語句和HAVING語句,經(jīng)過研究和練習(xí),終于明白如何使用了,在此記錄一下同時添加了一個自己舉的小例子,通過寫這篇文章來加深下自己學(xué)習(xí)的效果,還能和大家分享下,同時也方便以后查閱,一舉多得,下面由小編來和大家一起學(xué)習(xí)2019-05-05MySQL 8.0統(tǒng)計信息不準(zhǔn)確的原因
這篇文章主要介紹了MySQL 8.0統(tǒng)計信息不準(zhǔn)確的原因,幫助大家更好的理解和學(xué)習(xí)MySQL8.0的相關(guān)內(nèi)容,感興趣的朋友可以了解下2020-08-08關(guān)于數(shù)據(jù)庫中保留小數(shù)位的問題
本篇文章是對關(guān)于在數(shù)據(jù)庫中保留小數(shù)位的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07為什么MySQL選擇Repeatable Read作為默認(rèn)隔離級別
關(guān)于MySQL的事務(wù)隔離級別,相信很多讀者都不陌生,那么,你知道為什么Oracle選擇RC作為默認(rèn)級別,而MySQL要選擇RR作為默認(rèn)的隔離級別嗎2021-07-07