日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

一文帶你徹底了解MySQL事務機制

瀏覽:66日期:2023-08-28 20:27:10
目錄何謂事務?事務的特性:ACID事務的操作隔離性引發的并發問題不可重復讀和幻讀有什么區別事務的隔離級別MySQL 的隔離級別是基于鎖實現的嗎?默認隔離級別解決幻讀的方法總結

我們設想一個場景,這個場景中我們需要插入多條相關聯的數據到數據庫,不幸的是,這個過程可能會遇到下面這些問題:

數據庫中途突然因為某些原因掛掉了。客戶端突然因為網絡原因連接不上數據庫了。并發訪問數據庫時,多個線程同時寫入數據庫,覆蓋了彼此的更改。…

上面的任何一個問題都可能會導致數據的不一致性。為了保證數據的一致性,系統必須能夠處理這些問題。事務就是我們抽象出來簡化這些問題的首選機制。

事務的概念起源于數據庫,目前已經成為一個比較廣泛的概念。

何謂事務?

一個事情由n個單元組成,這n個單元在執行過程中,要么同時成功,要么同時失敗,這就把n個單元放在了一個事務之中。

舉個簡單的例子:在不考慮試題正確與否的前提下,一張試卷由多個題目構成,當你答完題交給老師的時候是將一整張試卷交給老師,而不是將每道題單獨交給老師,在這里試卷就可以理解成一個事務。

事務的特性:ACID

A:原子性(Atomicity),原子性是指事務是一個不可分割的工作單位,事務中的操作,要么都發生,要么都不發生。

例:假設你在購物車里添加了兩件衣服:上衣和褲子,當你把兩件衣服作為一個訂單提交支付的時候,要么兩件衣服一起支付成功,要么都失敗,不可能存在上衣付完錢了,褲子還沒付完的情況,反之亦然。

C:一致性(Consistency),在一個事務中,事務前后數據的完整性必須保持一致。

例:假設用戶A和用戶B兩者的錢加起來一共是200,那么不管A和B之間如何轉賬,轉幾次賬,事務結束后兩個用戶的錢相加起來應該還得是200,這就是事務的一致性。

I:隔離性(Isolation),存在于多個事務中,事務的隔離性是指多個用戶并發訪問數據庫時,一個用戶的事務不能被其它用戶的事務所干擾,多個并發事務之間數據要相互隔離。

例:對于任意兩個并發的事務T1和T2,在事務T1看來,T2要么在T1開始之前就已經結束,要么在T1結束之后才開始,這樣每個事務都感覺不到有其他事務在并發地執行。

D:持久性(Durability),持久性是指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來即使數據庫發生故障也不應該對其有任何影響。

例:我們在操作數據庫時,事務提交或者回滾都會直接改變數據庫中的值。

AID是手段,C是目的,AID都是為了保證數據的一致性。

事務的操作

在使用事務之前,首先我們要開啟事務,我們可以通過start或者begin命令開啟事務;如果我們想提交事務可以手動執行commit命令,如果我們想回滾事務,可以執行rollback命令。

# 開啟一個事務START TRANSACTION;# 多條 SQL 語句SQL1,SQL2...## 提交事務COMMIT;

注:在MySQL中事務的提交是默認開啟的,可以執行show variables like 'autocommit'命令查看,如果是ON則證明自動提交已經開啟,如果為OFF則需要手動提交。

隔離性引發的并發問題

1)臟讀:B事務讀取到了A事務尚未提交的數據;

一個事務讀取數據并且對數據進行了修改,這個修改對其他事務來說是可見的,即使當前事務沒有提交。這時另外一個事務讀取了這個還未提交的數據,但第一個事務突然回滾,導致數據并沒有被提交到數據庫,那第二個事務讀取到的就是臟數據,這也就是臟讀的由來。

2)不可重復讀:B事務讀到了A事務已經提交的數據,即B事務在A事務提交之前和提交之后讀取到的數據內容不一致(AB事務操作的是同一條數據);

事務 1 讀取某表中的數據 A=20,事務 2 也讀取 A=20,事務 1 修改 A=A-1,事務 2 再次讀取 A =19,此時讀取的結果和第一次讀取的結果不同。

3)幻讀/虛讀:B事務讀到了A事務已經提交的數據,即A事務執行插入操作,B事務在A事務前后讀到的數據數量不一致。

事務 2 讀取某個范圍的數據,事務 1 在這個范圍插入了新的數據,事務 2 再次讀取這個范圍的數據發現相比于第一次讀取的結果多了新的數據。

不可重復讀和幻讀有什么區別不可重復讀的重點是內容修改或者記錄減少比如多次讀取一條記錄發現其中某些記錄的值被修改;幻讀的重點在于記錄新增比如多次執行同一條查詢語句(DQL)時,發現查到的記錄增加了。

幻讀其實可以看作是不可重復讀的一種特殊情況,單獨把區分幻讀的原因主要是解決幻讀和不可重復讀的方案不一樣。

舉個例子:執行 delete 和 update 操作的時候,可以直接對記錄加鎖,保證事務安全。而執行 insert 操作的時候,由于記錄鎖(Record Lock)只能鎖住已經存在的記錄,為了避免插入新記錄,需要依賴間隙鎖(Gap Lock)。也就是說執行 insert 操作的時候需要依賴 Next-Key Lock(Record Lock+Gap Lock) 進行加鎖來保證不出現幻讀。

事務的隔離級別

為了解決以上隔離性引發的并發問題,數據庫提供了事物的隔離機制。

read uncommitted(讀未提交): 一個事務還沒提交時,它做的變更就能被別的事務看到,讀取尚未提交的數據,哪個問題都不能解決;read committed(讀已提交):一個事務提交之后,它做的變更才會被其他事務看到,讀取已經提交的數據,可以解決臟讀 ---- oracle默認的;repeatable read(可重復讀):一個事務執行過程中看到的數據,總是跟這個事務在啟動時看到的數據是一致的,可以解決臟讀和不可重復讀 —mysql默認的;serializable(串行化):顧名思義是對于同一行記錄,“寫”會加“寫鎖”,“讀”會加“讀鎖”。當出現讀寫鎖沖突的時候,后訪問的事務必須等前一個事務執行完成,才能繼續執行。可以解決臟讀、不可重復讀和虛讀—相當于鎖表。

雖然serializable級別可以解決所有的數據庫并發問題,但是它會在讀取的每一行數據上都加鎖,這就可能導致大量的超時和鎖競爭問題,從而導致效率下降。所以我們在實際應用中也很少使用serializable,只有在非常需要確保數據的一致性而且可以接受沒有并發的情況下,才考慮采用該級別。

MySQL 的隔離級別是基于鎖實現的嗎?

MySQL 的隔離級別基于鎖和 MVCC 機制共同實現的。

SERIALIZABLE 隔離級別是通過鎖來實現的,READ-COMMITTED 和 REPEATABLE-READ 隔離級別是基于 MVCC 實現的。不過, SERIALIZABLE 之外的其他隔離級別可能也需要用到鎖機制,就比如 REPEATABLE-READ 在當前讀情況下需要使用加鎖讀來保證不會出現幻讀。

默認隔離級別

MySQL InnoDB 存儲引擎的默認支持的隔離級別是 REPEATABLE-READ(可重復讀)。我們可以通過 SELECT @@tx_isolation;命令來查看,MySQL 8.0 該命令改為SELECT @@transaction_isolation;

# 開啟一個事務START TRANSACTION;# 多條 SQL 語句SQL1,SQL2...## 提交事務COMMIT;

從上面對 SQL 標準定義了四個隔離級別的介紹可以看出,標準的 SQL 隔離級別定義里,REPEATABLE-READ(可重復讀)是不可以防止幻讀的。

但是 InnoDB 實現的 REPEATABLE-READ 隔離級別其實是可以解決幻讀問題發生的,主要有下面兩種情況:

快照讀 :由 MVCC 機制來保證不出現幻讀。當前讀 :使用 Next-Key Lock(臨鍵鎖) 進行加鎖來保證不出現幻讀,Next-Key Lock 是行鎖(Record Lock)和間隙鎖(Gap Lock)的結合,行鎖只能鎖住已經存在的行,為了避免插入新行,需要依賴間隙鎖。

InnoDB 存儲引擎在分布式事務的情況下一般會用到 SERIALIZABLE 隔離級別。

解決幻讀的方法

解決幻讀的方式有很多,但是它們的核心思想就是一個事務在操作某張表數據的時候,另外一個事務不允許新增或者刪除這張表中的數據了。解決幻讀的方式主要有以下幾種:

將事務隔離級別調整為 SERIALIZABLE 。在可重復讀的事務級別下,給事務操作的這張表添加表鎖。在可重復讀的事務級別下,給事務操作的這張表添加 Next-key Lock(Record Lock+Gap Lock)總結

看到這,你對事務是否已經有了清晰的認識?接下來我們就簡單總結下今天的知識點:

事務的概念:一個事情由n個單元組成,這n個單元在執行過程中,要么同時成功,要么同時失敗,這就把n個單元放在了一個事務之中。事務的特性:ACID事務的操作:開啟事務、提交事務、回滾事務事務的隔離級別:讀未提交、讀已提交、可重復讀、串行化解決幻讀的方法:鎖機制和MVCC機制

以上就是一文帶你徹底了解MySQL事務機制的詳細內容,更多關于MySQL事務機制的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美成人精品午夜一区二区| 精品视频一区二区三区在线观看| 日本不卡视频在线观看| 91精品成人| 亚洲欧洲日本mm| 少妇精品在线| 久久99偷拍| www.com.cn成人| 国产精品av久久久久久麻豆网| 久久影院一区| 91tv亚洲精品香蕉国产一区| 在线国产一区| 久久久久中文| 91亚洲精品在看在线观看高清| 久久精品资源| 久久av偷拍| 国产精品精品国产一区二区| 不卡中文字幕| 2023国产精品久久久精品双| 亚洲一区二区三区高清不卡| 国产精品任我爽爆在线播放| 99精品在线免费在线观看| 在线观看精品| 亚洲国产不卡| 综合激情网...| 日韩综合一区| 99riav国产精品| 久久国产99| 欧美三级网址| 久久九九99| 在线亚洲一区| 日本va欧美va瓶| 另类小说一区二区三区| 午夜欧美巨大性欧美巨大| 欧美+亚洲+精品+三区| 蜜臀a∨国产成人精品| 成人国产精品一区二区网站| 蘑菇福利视频一区播放| 美女久久网站| 国产探花在线精品一区二区| 亚洲一区免费| 亚洲区欧美区| 国产精品中文字幕制服诱惑| 精品国产第一福利网站| 亚洲一区欧美二区| 国产欧美91| 亚洲精品**中文毛片| 日韩午夜高潮| 国产精品**亚洲精品| 国产在线|日韩| 综合日韩在线| 福利在线一区| 欧美专区18| 麻豆精品久久| 免费成人网www| 国产欧美欧美| 亚洲精品国产偷自在线观看| 日日摸夜夜添夜夜添国产精品| 97视频热人人精品免费| 免费一区二区视频| 97人人精品| 日韩av字幕| 欧美亚洲国产激情| 日韩精品中文字幕一区二区| 天堂日韩电影| 国产日韩一区二区三区在线播放| av亚洲一区二区三区| 日韩在线电影| 亚洲香蕉网站| 久久精品国产一区二区| 亚洲日本在线观看视频| 精品欧美一区二区三区在线观看| 日韩精品1区2区3区| 午夜国产一区二区| 精品国产乱码久久久久久樱花| 亚洲麻豆一区| 久久高清免费| 国产精品久久久久9999高清| 国产精品日本| 欧美天堂视频| 久久黄色影视| 久久亚洲电影| 久久久天天操| 精品国产亚洲日本| 日韩1区2区3区| 亚洲免费成人| 亚洲综合电影| 国产情侣一区在线| 免费观看日韩电影| 91精品国产乱码久久久久久久| 国产精品久久久久久久免费软件 | 91精品国产自产观看在线 | 日韩欧美视频专区| 欧美精品成人| 欧美伊人久久| 亚洲色图综合| 99在线精品免费视频九九视| 超碰在线99| 国产精品2区| 日韩国产精品久久久| 欧美综合二区| 婷婷久久一区| 999久久久精品国产| 久久久久免费| 国产一区日韩| 成人免费一区| 狠狠久久伊人中文字幕| 国产欧美日韩精品高清二区综合区| 日韩久久一区| 日韩精品乱码av一区二区| 免费人成黄页网站在线一区二区| 欧美日韩国产免费观看| 天堂日韩电影| 91精品国产自产在线观看永久∴ | 美女视频黄久久| 国产欧美日韩精品一区二区免费| 91精品丝袜国产高跟在线| 日韩激情啪啪| 亚洲男人在线| 亚洲精品福利| 欧美日韩xxxx| 国产无遮挡裸体免费久久| 日韩和欧美一区二区三区| 亚洲精品极品| 日韩高清三区| 国产午夜精品一区在线观看| 国产日韩欧美一区二区三区在线观看| 日韩精品欧美精品| 日本在线视频一区二区| 日韩成人精品一区二区三区 | 国产成人精品亚洲线观看| 久久精品色播| 国产一区二区三区四区二区| 成人国产精品| 欧美日韩中文一区二区| 美女毛片一区二区三区四区| 激情欧美丁香| 视频一区在线视频| 日韩国产在线一| 国产伦理一区| 国产一区二区三区网| 日韩欧美国产精品综合嫩v| 欧美色图一区| 免费人成在线不卡| 国产精品丝袜在线播放| 日韩在线中文| 一级成人国产| 日本亚洲欧美天堂免费| 日韩精品导航| 国产福利资源一区| 日韩综合一区| 久久久精品久久久久久96| 性欧美69xoxoxoxo| 亚洲精品美女| 美女性感视频久久| 亚洲成人不卡| 日韩专区欧美专区| 国产精品亚洲二区| 日本在线啊啊| 男女性色大片免费观看一区二区 | 国产成人免费视频网站视频社区| 另类专区亚洲| 中文字幕av一区二区三区四区| 视频一区二区三区在线| 国产伦精品一区二区三区视频| 国产aⅴ精品一区二区三区久久| 国产高清不卡| 日韩午夜黄色| 国产欧美日韩一区二区三区四区| 精品香蕉视频| 激情91久久| 热久久久久久| 日韩精品一区二区三区免费观影 | 亚洲高清av| 亚洲欧洲日韩精品在线| 鲁大师精品99久久久| 久久蜜桃av| 日韩av中文字幕一区二区三区| 国产a亚洲精品| 欧美日韩四区| 国产日韩欧美一区| 色婷婷久久久| 视频一区国产视频| 久久精品国产一区二区| 欧美日韩国产在线观看网站| 91精品国产自产观看在线| 日韩欧美综合| 免费在线观看成人| 精品欧美视频| 爽好久久久欧美精品| 国产精品18| 中文国产一区| 国产精品久av福利在线观看| 国产一区清纯| 国产精品久久久久久妇女 | 亚洲精品成a人ⅴ香蕉片| 麻豆成全视频免费观看在线看| 免费人成在线不卡| 中文字幕在线免费观看视频| 亚洲三级网址|