【輕知識(shí)】mysql事務(wù)隔離筆記與練習(xí)

事務(wù)隔離級(jí)別

  • 讀未提交(read uncommitted)
    讀未提交是指,一個(gè)事務(wù)還沒(méi)提交時(shí)诱担,它做的變更就能被別的事務(wù)看到。
  • 讀提交(read committed)
    讀提交是指,一個(gè)事務(wù)提交之后溢陪,它做的變更才會(huì)被其他事務(wù)看到。
  • 可重復(fù)讀(repeatable read)
    可重復(fù)讀是指睛廊,一個(gè)事務(wù)執(zhí)行過(guò)程中看到的數(shù)據(jù)形真,總是跟這個(gè)事務(wù)在啟動(dòng)時(shí)看到的數(shù)據(jù)
    是一致的。當(dāng)然在可重復(fù)讀隔離級(jí)別下超全,未提交變更對(duì)其他事務(wù)也是不可見(jiàn)的
  • 串行化(serializable)
    串行化咆霜,顧名思義是對(duì)于同一行記錄,“寫(xiě)”會(huì)加“寫(xiě)鎖”嘶朱,“讀”會(huì)加“讀鎖”蛾坯。當(dāng)
    出現(xiàn)讀寫(xiě)鎖沖突的時(shí)候,后訪(fǎng)問(wèn)的事務(wù)必須等前一個(gè)事務(wù)執(zhí)行完成疏遏,才能繼續(xù)執(zhí)行脉课。

事務(wù)隔離級(jí)別練習(xí)

啟動(dòng)兩個(gè)窗口

準(zhǔn)備語(yǔ)句

create database mysql45救军;
use mysql45;

查看當(dāng)前的事務(wù)隔離級(jí)別

mysql> show variables like 'tx_isolation'; # (我電腦是phpstudy自帶的mysql版本是5.5倘零。5.7引入了transaction_isolation唱遭,所以用show variables like 'transaction_isolation'; )或select @@tx_isolation;
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+

既然是 REPEATABLE-READ所以我先練習(xí)的是可重復(fù)讀。

A表示左邊窗口呈驶。B表示右邊窗口拷泽。

讀未提交

設(shè)置隔離級(jí)別的方式set tx_isolation = 'read-uncommitted';

B還沒(méi)有commit事務(wù)的時(shí)候,A事務(wù)就能查出剛insert 的數(shù)據(jù)袖瞻,也能查出update之后的數(shù)據(jù)司致。

當(dāng)B commit之后,當(dāng)然A查詢(xún)的結(jié)果不變聋迎。

image.png

讀提交

set tx_isolation = 'read-committed';

B未commit即便插入了數(shù)據(jù)或者更新元數(shù)據(jù)脂矫;A事務(wù)查詢(xún)的結(jié)果是一致的。

B commit 之后砌庄;A事務(wù)查詢(xún)到了B commit后的結(jié)果羹唠。

image.png

可重復(fù)讀

set tx_isolation = 'repeatable-read';

B不commit即便插入了數(shù)據(jù)或者更新元數(shù)據(jù);A事務(wù)查詢(xún)的結(jié)果是一致的娄昆。(這點(diǎn)跟讀提交是相同的)

B commit佩微,A事務(wù)查詢(xún)?nèi)匀皇且恢碌摹?/p>

image.png

串行化

set tx_isolation = 'serializable';

A 先操作語(yǔ)句,B會(huì)阻塞住萌焰。會(huì)用到鎖哺眯。

image.png

或者B先操作語(yǔ)句會(huì)阻塞住A。

image.png

A commit之后扒俯,B不在阻塞就查到了提交的數(shù)據(jù)了奶卓。

image.png

begin/start transaction 命令并不是一個(gè)事務(wù)的起點(diǎn),在執(zhí)行到它們之后的第一個(gè)操作InnoDB 表的語(yǔ)句(第一個(gè)快照讀語(yǔ)句)撼玄,事務(wù)才真正啟動(dòng)夺姑。如果你想要馬上啟動(dòng)一個(gè)事務(wù),可以使用 start transaction with consistent snapshot 這個(gè)命令掌猛。
“start transaction with consistent snapshot; ”的意思是從這個(gè)語(yǔ)句開(kāi)始盏浙,創(chuàng)建一個(gè)持續(xù)整個(gè)事務(wù)的一致性快照。所以荔茬,在讀提交隔離級(jí)別下废膘,這個(gè)用法就沒(méi)意義了,等效于普通的 start transaction慕蔚。

事務(wù)的啟動(dòng)方式

不同時(shí)刻啟動(dòng)的事務(wù)有不同的read-view丐黄,對(duì)同一條記錄操作,會(huì)產(chǎn)生多個(gè)版本(回滾段)孔飒,就是數(shù)據(jù)庫(kù)的多版本并發(fā)控制(MVCC)灌闺。

select @@autocommit; # 或show variables like 'autocommit'; 我的默認(rèn)為開(kāi)啟

  1. 顯式啟動(dòng)事務(wù)語(yǔ)句艰争, begin 或 start transaction。配套的提交語(yǔ)句是 commit桂对,回滾語(yǔ)
    句是 rollback园细。
  2. set autocommit=0,這個(gè)命令會(huì)將這個(gè)線(xiàn)程的自動(dòng)提交關(guān)掉接校。意味著如果你只執(zhí)行一個(gè) select 語(yǔ)句,這個(gè)事務(wù)就啟動(dòng)了狮崩,而且并不會(huì)自動(dòng)提交蛛勉。這個(gè)事務(wù)持續(xù)存在直到你主動(dòng)執(zhí)行 commit 或 rollback 語(yǔ)句,或者斷開(kāi)連接睦柴。

建議 autocommit 為1诽凌。通過(guò)顯式語(yǔ)句啟動(dòng)事務(wù)。

長(zhǎng)事務(wù)

長(zhǎng)事務(wù)意味著系統(tǒng)里面會(huì)存在很老的事務(wù)視圖坦敌。由于這些事務(wù)隨時(shí)可能訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)里面的
任何數(shù)據(jù)侣诵,所以這個(gè)事務(wù)提交之前,數(shù)據(jù)庫(kù)里面它可能用到的回滾記錄都必須保留狱窘,這就
會(huì)導(dǎo)致大量占用存儲(chǔ)空間杜顺。

除了對(duì)回滾段的影響,長(zhǎng)事務(wù)還占用鎖資源蘸炸,可能拖垮整個(gè)庫(kù)躬络。

制造一個(gè)長(zhǎng)事務(wù)。B窗口begin 執(zhí)行一條語(yǔ)句搭儒。在A(yíng)中查穷当。

你可以在 information_schema 庫(kù)的 innodb_trx 這個(gè)表中查詢(xún)長(zhǎng)事務(wù)。

select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60; // 大于60s淹禾。
image.png

我問(wèn)了下DBA馁菜,他們監(jiān)控的長(zhǎng)事務(wù)就是這張表。

有次有一個(gè)小伙伴查數(shù)據(jù)铃岔,沒(méi)提交就放著汪疮。

image.png

參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜓洪,隨后出現(xiàn)的幾起案子纤勒,更是在濱河造成了極大的恐慌,老刑警劉巖隆檀,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摇天,死亡現(xiàn)場(chǎng)離奇詭異粹湃,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)泉坐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)为鳄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人腕让,你說(shuō)我怎么就攤上這事孤钦。” “怎么了纯丸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵偏形,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我觉鼻,道長(zhǎng)俊扭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任坠陈,我火速辦了婚禮萨惑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仇矾。我一直安慰自己庸蔼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布贮匕。 她就那樣靜靜地躺著朱嘴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粗合。 梳的紋絲不亂的頭發(fā)上萍嬉,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音隙疚,去河邊找鬼壤追。 笑死,一個(gè)胖子當(dāng)著我的面吹牛供屉,可吹牛的內(nèi)容都是我干的行冰。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伶丐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悼做!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起哗魂,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肛走,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后录别,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體朽色,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邻吞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葫男。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抱冷。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梢褐,靈堂內(nèi)的尸體忽然破棺而出旺遮,到底是詐尸還是另有隱情,我是刑警寧澤盈咳,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布趣效,位于F島的核電站,受9級(jí)特大地震影響猪贪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讯私,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一热押、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斤寇,春花似錦桶癣、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至莫秆,卻和暖如春间雀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镊屎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工惹挟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缝驳。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓连锯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親用狱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子运怖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 一、事務(wù) 1夏伊、事務(wù)四要素:ACID 對(duì)于事務(wù)摇展,我之前的理解是很粗糙的,不就是為了保證操作的原子性么溺忧?一般訂單系統(tǒng)或...
    張偉科閱讀 1,314評(píng)論 0 5
  • MySQL 事務(wù)的四種隔離級(jí)別 1 事務(wù)的基本要素(ACID) 原子性(Atomicity):事務(wù)開(kāi)始后所有操作吗购,...
    4a873e424089閱讀 651評(píng)論 0 0
  • 準(zhǔn)備工作了解 mysql -uroot -p123456use test;;系統(tǒng)級(jí)隔離級(jí)別,如果只是實(shí)驗(yàn)系統(tǒng)的可以...
    zhyke閱讀 366評(píng)論 0 1
  • 真的忘了医男,放心里
    ooo那個(gè)還是miy閱讀 60評(píng)論 0 0
  • 世界上沒(méi)有什么是永恒的镀梭,被人創(chuàng)造的總會(huì)存在的比人久,有人可能會(huì)譏笑踱启,但是小光就是這么認(rèn)為的报账。 “不怕死不怕老這是...
    張靜軒閱讀 331評(píng)論 2 0