MySQL事務(wù)

事務(wù)就是要保證一組數(shù)據(jù)庫(kù)操作每瞒,要么全部成功金闽,要么全部失敗。在MySQL中剿骨,事務(wù)支持是在引擎層實(shí)現(xiàn)的

ACID(Atomicity代芜、Consistency、Isolation浓利、Durability挤庇,即原子性、一致性贷掖、隔離性嫡秕、持久性)

InnoDB里面每個(gè)事務(wù)有一個(gè)唯一的事務(wù)ID,叫作transaction id羽资。它是在事務(wù)開(kāi)始的時(shí)候向InnoDB的事務(wù)系統(tǒng)申請(qǐng)的淘菩,是按申請(qǐng)順序嚴(yán)格遞增的

隔離性與隔離級(jí)別

讀未提交(read uncommitted) 一個(gè)事務(wù)還沒(méi)提交時(shí),它做的變更就能被別的事務(wù)看到

讀提交(read committed)一個(gè)事務(wù)提交之后屠升,它做的變更才會(huì)被其他事務(wù)看到,查詢只承認(rèn)在語(yǔ)句啟動(dòng)前就已經(jīng)提交完成的數(shù)據(jù)

可重復(fù)讀(repeatable read) 一個(gè)事務(wù)執(zhí)行過(guò)程中看到的數(shù)據(jù)潮改,總是跟這個(gè)事務(wù)在啟動(dòng)時(shí)看到的數(shù)據(jù)是一致的,未提交變更對(duì)其他事務(wù)也是不可見(jiàn)的,查詢只承認(rèn)在事務(wù)啟動(dòng)前就已經(jīng)提交完成的數(shù)據(jù)

串行化(serializable )同一行記錄腹暖,“寫”會(huì)加“寫鎖”汇在,“讀”會(huì)加“讀鎖”。當(dāng)出現(xiàn)讀寫鎖沖突的時(shí)候脏答,后訪問(wèn)的事務(wù)必須等前一個(gè)事務(wù)執(zhí)行完成糕殉,才能繼續(xù)執(zhí)行

長(zhǎng)事務(wù)和回滾日志

回滾日志: 在MySQL中,每條記錄在更新的時(shí)候都會(huì)同時(shí)記錄一條回滾操作殖告。記錄上的最新值阿蝶,通過(guò)回滾操作,都可以得到前一個(gè)狀態(tài)的值

在查詢這條記錄的時(shí)候黄绩,不同時(shí)刻啟動(dòng)的事務(wù)會(huì)有不同的read-view,要獲取舊的視圖羡洁,必須將當(dāng)前值依次執(zhí)行回滾操作得到

當(dāng)沒(méi)有事務(wù)再需要用到這些回滾日志時(shí),就是當(dāng)系統(tǒng)里沒(méi)有比這個(gè)回滾日志更早的read-view的時(shí)候爽丹,回滾日志會(huì)被刪除

長(zhǎng)事務(wù)的影響系統(tǒng)里面會(huì)存在很老的事務(wù)視圖筑煮,在這個(gè)事務(wù)提交之前數(shù)據(jù)庫(kù)里面它可能用到的回滾記錄都必須保留辛蚊,這就會(huì)導(dǎo)致大量占用存儲(chǔ)空間

set autocommit=0 這個(gè)命令會(huì)將這個(gè)線程的自動(dòng)提交關(guān)掉,只執(zhí)行一個(gè)select語(yǔ)句真仲,這個(gè)事務(wù)就啟動(dòng)了袋马,而且并不會(huì)自動(dòng)提交。持續(xù)存在直到你主動(dòng)執(zhí)行commit 或 rollback 語(yǔ)句秸应,或者斷開(kāi)連接

commit work and chain 提交事務(wù)并自動(dòng)啟動(dòng)下一個(gè)事務(wù)虑凛,省去了再次執(zhí)行begin語(yǔ)句的開(kāi)銷

查找持續(xù)時(shí)間超過(guò)60s的事務(wù)

select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60

SET MAX_EXECUTION_TIME命令,來(lái)控制每個(gè)語(yǔ)句執(zhí)行的最長(zhǎng)時(shí)間灸眼,避免單個(gè)語(yǔ)句意外執(zhí)行太長(zhǎng)時(shí)間

監(jiān)控 information_schema.Innodb_trx表卧檐,設(shè)置長(zhǎng)事務(wù)閾值墓懂,超過(guò)就報(bào)警/或者kill

設(shè)置innodb_undo_tablespaces(默認(rèn)值為0焰宣,表示不獨(dú)立設(shè)置undo的tablespace,默認(rèn)記錄到ibdata系統(tǒng)表空間中,否則捕仔,則在undo目錄下創(chuàng)建這么多個(gè)undo文件)成2(或更大的值)匕积,如果真的出現(xiàn)大事務(wù)導(dǎo)致回滾段過(guò)大方便清理

可重復(fù)讀和MVCC

MVCC 數(shù)據(jù)表中的一行記錄,其實(shí)可能有多個(gè)版本(row)榜跌,每個(gè)版本有自己的row trx_id,舊版本需要根據(jù)當(dāng)前版本和undo log計(jì)算出來(lái)

begin/start transaction 命令并不是一個(gè)事務(wù)的起點(diǎn)闪唆,在執(zhí)行到它們之后的第一個(gè)操作InnoDB表的語(yǔ)句(第一個(gè)快照讀語(yǔ)句),事務(wù)才真正啟動(dòng)钓葫。如果想要馬上啟動(dòng)一個(gè)事務(wù)悄蕾,可以使用start transaction with consistent snapshot1

InnoDB為每個(gè)事務(wù)構(gòu)造了一個(gè)數(shù)組,用來(lái)保存這個(gè)事務(wù)啟動(dòng)瞬間础浮,當(dāng)前正在“活躍”的所有事務(wù)ID帆调。“活躍”指的就是豆同,啟動(dòng)了但還沒(méi)提交,數(shù)組里面事務(wù)ID的最小值記為低水位番刊,當(dāng)前系統(tǒng)里面已經(jīng)創(chuàng)建過(guò)的事務(wù)ID的最大值加1記為高水位。

這個(gè)視圖數(shù)組和高水位影锈,就組成了當(dāng)前事務(wù)的一致性視圖(read-view)芹务,只有版本已提交,而且是在視圖創(chuàng)建前提交的才可見(jiàn)

更新數(shù)據(jù)都是先讀后寫的鸭廷,而這個(gè)讀枣抱,只能讀當(dāng)前的值,稱為“當(dāng)前讀”(current read) set k=k+1會(huì)拿最新的值做更新辆床,更新后的trx_id是自己的更新佳晶,可以直接使用,如果當(dāng)前的記錄的行鎖被其他事務(wù)占用的話佛吓,就需要進(jìn)入鎖等待

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宵晚,一起剝皮案震驚了整個(gè)濱河市垂攘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淤刃,老刑警劉巖晒他,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異逸贾,居然都是意外死亡陨仅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門铝侵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)灼伤,“玉大人,你說(shuō)我怎么就攤上這事咪鲜『模” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵疟丙,是天一觀的道長(zhǎng)颖侄。 經(jīng)常有香客問(wèn)我,道長(zhǎng)享郊,這世上最難降的妖魔是什么悠菜? 我笑而不...
    開(kāi)封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任塔次,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒂秘。我一直安慰自己册招,他們只是感情好漓概,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布刀闷。 她就那樣靜靜地躺著,像睡著了一般悼泌。 火紅的嫁衣襯著肌膚如雪松捉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天馆里,我揣著相機(jī)與錄音隘世,去河邊找鬼。 笑死鸠踪,一個(gè)胖子當(dāng)著我的面吹牛丙者,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播营密,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼械媒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起纷捞,我...
    開(kāi)封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痢虹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后主儡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體奖唯,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年糜值,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丰捷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寂汇,死狀恐怖病往,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骄瓣,我是刑警寧澤停巷,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站累贤,受9級(jí)特大地震影響叠穆,放射性物質(zhì)發(fā)生泄漏少漆。R本人自食惡果不足惜臼膏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望示损。 院中可真熱鬧渗磅,春花似錦、人聲如沸检访。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脆贵。三九已至医清,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卖氨,已是汗流浹背会烙。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留筒捺,地道東北人柏腻。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像系吭,于是被迫代替她去往敵國(guó)和親五嫂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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

  • 事務(wù)處理 事務(wù)處理是數(shù)據(jù)庫(kù)中的一個(gè)大塊頭,涉及到數(shù)據(jù)的完整性與一致性問(wèn)題沃缘,由于mysql存在多種數(shù)據(jù)存儲(chǔ)引擎提供給...
    tanghomvee閱讀 743評(píng)論 0 0
  • https://www.runoob.com/mysql/mysql-transaction.html[https...
    王王王王王景閱讀 21,162評(píng)論 4 23
  • 事務(wù)的四大特性(簡(jiǎn)稱ACID) 數(shù)據(jù)庫(kù)如果支持事務(wù)的操作躯枢,那么就具備以下四個(gè)特性: 1、原子性(Atomicity...
    gregoriusxu閱讀 319評(píng)論 0 0
  • 一槐臀、事務(wù)概述 我們可以將事務(wù)理解為一組sql語(yǔ)句的集合闺金。事務(wù)可以只包含一條sql,也可以包含多條sql峰档,事務(wù)中所有...
    國(guó)球乒乓閱讀 369評(píng)論 0 0
  • http://baijiahao.baidu.com/s?id=1581064626251873652&wfr=s...
    hekang01閱讀 663評(píng)論 0 0