深入理解Mysql鎖與事物隔離級別

本文章主要解釋以下主要幾個問題:

事物與ACID屬性:
  • 原子性(Atomicity)
  • 一致性(Consistent)
  • 隔離性(Isolation)
  • 持久性(Durable)
并發(fā)事物處理帶來的問題
  • 更新丟失
  • 臟讀
  • 不可復讀
  • 幻讀

事物與ACID屬性:

1瑟押、原子性 Atomicity
事務的原子性指的是,事務中包含的程序作為數據庫的邏輯工作單位颜曾,它所做的對數據修改操作要么全部執(zhí)行鼠锈,要么完全不執(zhí)行。這種特性稱為原子性耕腾。
2愤炸、一致性 Consistency
事務的一致性指的是在一個事務執(zhí)行之前和執(zhí)行之后數據庫都必須處于一致性狀態(tài)筋现。這種特性稱為事務的一致性拴竹。假如數據庫的狀態(tài)滿足所有的完整性約束悟衩,就說該數據庫是一致的。
3栓拜、隔離性 Isolation
隔離性指并發(fā)的事務是相互隔離的座泳。即一個事務內部的操作及正在操作的數據必須封鎖起來,不被其它企圖進行修改的事務看到菱属。
4钳榨、持久性 Durability
持久性意味著當系統(tǒng)或介質發(fā)生故障時,確保已提交事務的更新不能丟失纽门。即一旦一個事務提交,DBMS保證它對數據庫中數據的改變應該是永久性的营罢,耐得住任何數據庫系統(tǒng)故障赏陵。持久性通過數據庫備份和恢復來保證。
這里不對ACID做過多的解釋饲漾,大學課本里面有的


數據庫表的創(chuàng)建及數據插入見文末

行鎖-1.jpg

行鎖重現

這里分為事物A與事物B蝙搔,模擬多線程操作環(huán)境
事物A

事物-A-1.jpg

begin --開啟一個事物A
update account set balance =3000 where id=3;-- 更新id=3 余額
此時事物中Seesion中id=3余額已經修改為3000


事物A掛起,事物B進入
事物-B-2.jpg

此時事物B提交等待考传,應為事物A對id=3的行進行操作并未提交吃型,過一段時間后會顯示超時
這段時間如果事物A提交,事物B也會隨即提交

并發(fā)事物處理帶來的問題:

  • 更新丟失: 兩個事物同事操作相同的數據僚楞,后提交的事物會先覆蓋先提交的事物處理結果通過樂觀鎖就可以解決
  • 臟讀: 事物A讀取到了事物B以及修改單尚未提交的數據勤晚,如果事物B回滾,A讀取的數據無效泉褐,不符合一致性
  • 不可復讀: 事物A讀取到了事物B已經提交的修改數據赐写,不符合隔離性
  • 幻讀 : 事物A讀取帶了事物B提交的新增數據,不符合隔離性

更新丟失和臟讀是非常容易理解的膜赃,這里解釋一下不可復讀挺邀,
不可復讀:事物A先從數據庫查詢到變量a=2,此時事物B修改a=3并且提交,然后事物A查詢變量a的值應該為多少呢端铛?

不可復讀指的就是事物A讀到a=3.開始事物A操作都是基于a=2,
事物B修改后a=3;此時肯定會出錯泣矛,事物A操作都是基于賬號2,但是后面卻事物B介入禾蚕。
這樣就代碼沒辦法去寫以一定漏洞百出
幻讀:與不可復讀類似乳蓄,事物A讀數據庫中只有一條數據,事物B將這條記錄刪除夕膀,此時事物A再去讀表中將不會有記錄虚倒。這樣數據庫邏輯不符合,無法進行

四種事物隔離級別

四種隔離級別.jpg

下面進行實列驗證

  • Mysql默認事物隔離級別是REPRATABLE-READ(可從重復讀)

數據庫事物常用命令

--開啟事務
begin产舞;
--顯示數據庫事物隔離級別
show variables like 'tx_isolation';
--設置數據庫事物隔離級別
set tx_isolation ='REPRATABLE-READ'魂奥;
--提交事物
commit;
--回滾
roolback易猫;
  • 1 耻煤、臟讀

Mysql臟讀 .png

藍色框執(zhí)行順序無要求,黃色框按照指定順序執(zhí)行
對應步驟的執(zhí)行結果下圖:
臟讀1.jpg

  • 2准颓、不可復讀
    幻讀.png

    藍色框執(zhí)行順序無要求哈蝇,黃色框按照指定順序執(zhí)行
    對應步驟的執(zhí)行結果下圖:
    幻讀-1.jpg

    在此邏輯情況下肯定也會出現問題,假設一個線程A先讀取到balance的值400攘已,根據自己邏輯情況下Java將該值設為100炮赦;那么此時數據邏輯該怎么進行的!操作都是基于400样勃,一段時間后卻變?yōu)榱?50.

  • 3吠勘、不可復讀
    幻讀.png

    藍色框執(zhí)行順序無要求,黃色框按照指定順序執(zhí)行
    Mysql數據庫默認的隔離級別就是“可重復讀”峡眶,所以此時為進行set
    對應步驟的執(zhí)行結果下圖:
    幻讀-111.jpg

    幻讀現象肯定也是不符合業(yè)務邏輯的剧防,比如事物A讀取到賬戶1,并且基于賬戶A操作辫樱,此時另外一個線程介入開啟另外一個事物并刪除了1(或者新增了賬戶)峭拘,此時另外事物A基于賬戶1操作,半途卻發(fā)現一個賬戶都沒有咯狮暑。
  • 4 鸡挠、可串行化就是前面幾種情況都不會出現,相當于加入一把大鎖心例,業(yè)務進入即將表鎖定宵凌。但是效率極低,所以數據庫一般采用的可重復讀級別

MVCC機制:此時同一個事物在執(zhí)行第一次的Select時候回建立一個快照止后,在此查詢是會讀取到快照的瞎惫。鎖幻讀情況的重現會出現問題溜腐,先執(zhí)行一次update事物B新增的,再次進行select時候就能出現幻讀


表創(chuàng)建sql

CREATE TABLE account(
    id int(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR (255) DEFAULT NULL,
    balabce INT(11) DEFAULT NULL,
    PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT into account(name,balance)VALUES("李雷","450");
INSERT into account(name,balance)VALUES("韓梅梅","16000");
INSERT into account(name,balance)VALUES("lucy","2400");
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瓜喇,隨后出現的幾起案子挺益,更是在濱河造成了極大的恐慌,老刑警劉巖乘寒,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件望众,死亡現場離奇詭異,居然都是意外死亡伞辛,警方通過查閱死者的電腦和手機烂翰,發(fā)現死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚤氏,“玉大人甘耿,你說我怎么就攤上這事「捅酰” “怎么了佳恬?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長于游。 經常有香客問我毁葱,道長,這世上最難降的妖魔是什么贰剥? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任倾剿,我火速辦了婚禮,結果婚禮上鸠澈,老公的妹妹穿的比我還像新娘柱告。我一直安慰自己,他們只是感情好笑陈,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葵袭,像睡著了一般涵妥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坡锡,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天蓬网,我揣著相機與錄音,去河邊找鬼鹉勒。 笑死帆锋,一個胖子當著我的面吹牛,可吹牛的內容都是我干的禽额。 我是一名探鬼主播锯厢,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼皮官,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了实辑?” 一聲冷哼從身側響起捺氢,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剪撬,沒想到半個月后摄乒,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡残黑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年馍佑,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梨水。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡拭荤,死狀恐怖,靈堂內的尸體忽然破棺而出冰木,到底是詐尸還是另有隱情穷劈,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布踊沸,位于F島的核電站歇终,受9級特大地震影響,放射性物質發(fā)生泄漏逼龟。R本人自食惡果不足惜评凝,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腺律。 院中可真熱鬧奕短,春花似錦、人聲如沸匀钧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽之斯。三九已至日杈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佑刷,已是汗流浹背莉擒。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘫絮,地道東北人涨冀。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像麦萤,于是被迫代替她去往敵國和親鹿鳖。 傳聞我的和親對象是個殘疾皇子扁眯,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容

  • 一、事務 1栓辜、事務四要素:ACID 對于事務锹锰,我之前的理解是很粗糙的嚣镜,不就是為了保證操作的原子性么攒暇?一般訂單系統(tǒng)或...
    張偉科閱讀 1,310評論 0 5
  • 注:內容有點干曹傀,但希望你可以耐心地看完∠晾常回頭我寫一篇實操的文章幫助理解僵娃。 開發(fā)工作中我們會使用到事務,那你們知道事...
    小怪聊職場閱讀 9,163評論 3 35
  • 專業(yè)考題類型管理運行工作負責人一般作業(yè)考題內容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 9,011評論 0 13
  • 關于Mongodb的全面總結 MongoDB的內部構造《MongoDB The Definitive Guide》...
    中v中閱讀 31,947評論 2 89
  • 原生家庭這個詞腋妙,這兩年如火如荼地吹遍神州大地默怨,就像萬能解藥,能讓人從任何角度和立場骤素,都說出個子丑寅卯來匙睹。 如果自己...
    楊梅煮酒閱讀 436評論 1 2