Mysql 一條更新語句的執(zhí)行過程

更新?user?表中?id=1?的這條數(shù)據(jù)茉继,它的大致流程如上:

●?1、客戶端連接到MySQL服務(wù)器蚀乔,將SQL更新語句發(fā)送到服務(wù)器烁竭;

MySQL服務(wù)器連接池中會(huì)有一個(gè)連接和客戶端建立連接,然后后臺(tái)線程會(huì)從連接中獲取到要執(zhí)行的SQL語句吉挣,并發(fā)送給SQL接口去調(diào)度執(zhí)行派撕。

●?2、增睬魂、刪终吼、改?時(shí),會(huì)將查詢緩存中?user?表相關(guān)的緩存都清空汉买。

●?3、SQL語句經(jīng)過SQL解析器解析佩脊、優(yōu)化器優(yōu)化蛙粘,得到一個(gè)執(zhí)行路徑,前面這些和執(zhí)行查詢其實(shí)都是類似的威彰。

●?4出牧、接著由執(zhí)行引擎去調(diào)用底層的存儲(chǔ)引擎接口,根據(jù)執(zhí)行計(jì)劃完成SQL語句的執(zhí)行歇盼。

○?首先查詢出要更新的數(shù)據(jù)舔痕,這一步會(huì)先判斷緩沖池(Buffer?Pool)中是否已經(jīng)存在這條數(shù)據(jù),如果已經(jīng)存在了豹缀,則直接從緩存池獲取數(shù)據(jù)返回伯复。否則從磁盤數(shù)據(jù)文件中加載這條數(shù)據(jù)到緩沖池中,再返回?cái)?shù)據(jù)邢笙。

○?獲取到數(shù)據(jù)后啸如,執(zhí)行引擎會(huì)根據(jù)SQL更新數(shù)據(jù),然后調(diào)用存儲(chǔ)引擎更新數(shù)據(jù)氮惯。這一步會(huì)對(duì)數(shù)據(jù)加排它鎖叮雳,避免并發(fā)更新問題想暗。之后先寫?undolog?到緩沖池,undolog?主要用于事務(wù)回滾帘不、MVCC等说莫;同時(shí),undolog?也會(huì)產(chǎn)生?redolog?日志寞焙。

○??之后更新緩沖池中的數(shù)據(jù)储狭,同時(shí)記錄?redolog?到?RedoLog緩沖池,redolog?主要用于保證數(shù)據(jù)的持久性棺弊,宕機(jī)恢復(fù)數(shù)據(jù)等晶密。

○?最后提交事務(wù),雖然沒有手動(dòng)?commit?提交事務(wù)模她,update?語句執(zhí)行完成后也會(huì)有隱式的事務(wù)提交的稻艰。事務(wù)提交時(shí),會(huì)先在MySQL服務(wù)器層面會(huì)寫入?binlog侈净,binlog是數(shù)據(jù)持久性的保證尊勿。最后將redolog刷入磁盤,完成事務(wù)提交畜侦。

●?5元扔、最底層的一部分就是磁盤上的數(shù)據(jù)文件、日志文件等旋膳,可以看到澎语,InnoDB?設(shè)計(jì)了緩沖池來緩沖數(shù)據(jù)、undolog验懊、redolog?等擅羞,這些內(nèi)存中的數(shù)據(jù)最終都是要刷新到磁盤中才能保證數(shù)據(jù)不丟失的。

事務(wù)特性:

○?原子性

■?指一個(gè)數(shù)據(jù)庫事務(wù)中的所有操作是不可分割的單元义图,只有事務(wù)中所有的數(shù)據(jù)庫操作都執(zhí)行成功减俏,才算整個(gè)事務(wù)成功。事務(wù)中任何一個(gè)SQL語句執(zhí)行失敗碱工,已經(jīng)執(zhí)行成功的SQL語句也必須撤銷娃承,數(shù)據(jù)庫狀態(tài)應(yīng)該退回到執(zhí)行事務(wù)前的狀態(tài)

○?一致性?

■?指事務(wù)將數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)變?yōu)橄乱环N一致的狀態(tài)。在事務(wù)開始之前和事務(wù)結(jié)束以后怕篷,數(shù)據(jù)庫的完整性約束沒有被破壞历筝。

○?隔離性

■?也叫?并發(fā)控制、可串行化廊谓、鎖等漫谷。事務(wù)的隔離性要求每個(gè)讀寫事務(wù)的對(duì)象對(duì)其他事務(wù)的操作對(duì)象能相互分離,即該事務(wù)提交前對(duì)其他事務(wù)都不可見蹂析,通常這使用鎖來實(shí)現(xiàn)

○?持久性

■?要求事務(wù)一旦提交舔示,其結(jié)果就是永久性的碟婆。即使發(fā)生宕機(jī)等故障,數(shù)據(jù)庫也能將數(shù)據(jù)恢復(fù)

事務(wù)分類:

●?扁平事務(wù)(Flat?Transactions)

●?帶有保存點(diǎn)的扁平事務(wù)(Flat?Transactions?with?Savepoints)

●?鏈?zhǔn)聞?wù)(Chained?Transactions)

●?嵌套事務(wù)(Nested?Transactions)

●?分布式事務(wù)(Distributed?Transactions)

對(duì)于InnoDB存儲(chǔ)引擎來說惕稻,其支持扁平事務(wù)竖共、帶有保存點(diǎn)的事務(wù)、鏈?zhǔn)聞?wù)俺祠、分布式事務(wù)公给。對(duì)于嵌套事務(wù),其并不原生支持蜘渣。

1淌铐、扁平事務(wù)

扁平事務(wù)是事務(wù)類型中最簡單的一種,也是使用最為頻繁的事務(wù)蔫缸。在扁平事務(wù)中腿准,所有操作都處于同一層次,由?BEGIN/START?TRANSACTION?開始拾碌,由?COMMIT?或?ROLLBACK?結(jié)束吐葱,其間的操作是原子的。

2校翔、帶有保存點(diǎn)的扁平事務(wù)

帶有保存點(diǎn)的扁平事務(wù)允許在事務(wù)執(zhí)行過程中回滾到同一事務(wù)中較早的一個(gè)狀態(tài)弟跑。我們可以在事務(wù)過程中設(shè)置一些保存點(diǎn)(Savepoint),保存點(diǎn)用來通知系統(tǒng)應(yīng)該記住事務(wù)當(dāng)前的狀態(tài)防症,以便當(dāng)之后發(fā)生錯(cuò)誤時(shí)孟辑,事務(wù)能回到保存點(diǎn)當(dāng)時(shí)的狀態(tài)。

對(duì)于扁平事務(wù)來說蔫敲,其在事務(wù)開始的時(shí)候隱式地設(shè)置了一個(gè)保存點(diǎn)饲嗽,扁平事務(wù)就只有這一個(gè)保存點(diǎn),因此燕偶,回滾只能回滾到事務(wù)開始時(shí)的狀態(tài)喝噪。

可以通過?SAVEPOINT?創(chuàng)建一個(gè)保存點(diǎn)础嫡,ROLLBACK?TO?SAVEPOINT?回滾到某個(gè)保存點(diǎn)指么。

3、鏈?zhǔn)聞?wù)

鏈?zhǔn)聞?wù)就是一個(gè)事務(wù)在提交的時(shí)候自動(dòng)將上下文傳給下一個(gè)事務(wù)榴鼎,也就是說一個(gè)事務(wù)的提交和下一個(gè)事務(wù)的開始是原子性的伯诬,下一個(gè)事務(wù)可以看到上一個(gè)事務(wù)的結(jié)果,就好像在一個(gè)事務(wù)中進(jìn)行的一樣巫财。

鏈?zhǔn)聞?wù)可視為保存點(diǎn)模式的一種變種盗似,不同的是,帶有保存點(diǎn)的扁平事務(wù)能回滾到任意正確的保存點(diǎn)平项,而鏈?zhǔn)聞?wù)中的回滾僅限于當(dāng)前事務(wù)赫舒。

MySQL?的鏈?zhǔn)绞聞?wù)可以通過?SET?completion_type?=?1?打開悍及。

4、嵌套事務(wù)

嵌套事務(wù)是一個(gè)層次結(jié)構(gòu)框架接癌,由一個(gè)頂層事務(wù)控制著各個(gè)層次的事務(wù)心赶。頂層事務(wù)之下嵌套的事務(wù)被稱為子事務(wù),其控制每一個(gè)局部的變換缺猛。子事務(wù)提交后不會(huì)真的提交缨叫,而是等到父事務(wù)提交才真正的提交,父事務(wù)回滾了荔燎,會(huì)回滾所有子事務(wù)耻姥。

MySQL?不支持嵌套事務(wù),不過我們可以通過帶有保存點(diǎn)的事務(wù)來模擬串行的嵌套事務(wù)有咨。

5琐簇、分布式事務(wù)

分布式事務(wù)通常是一個(gè)在分布式環(huán)境下運(yùn)行的扁平事務(wù),需要根據(jù)數(shù)據(jù)所在位置訪問網(wǎng)絡(luò)中的不同節(jié)點(diǎn)摔吏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸽嫂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子征讲,更是在濱河造成了極大的恐慌据某,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诗箍,死亡現(xiàn)場離奇詭異癣籽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)滤祖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門筷狼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匠童,你說我怎么就攤上這事埂材。” “怎么了汤求?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵俏险,是天一觀的道長。 經(jīng)常有香客問我扬绪,道長竖独,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任挤牛,我火速辦了婚禮莹痢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己竞膳,他們只是感情好航瞭,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坦辟,像睡著了一般沧奴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上长窄,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天滔吠,我揣著相機(jī)與錄音,去河邊找鬼挠日。 笑死疮绷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嚣潜。 我是一名探鬼主播冬骚,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼懂算!你這毒婦竟也來了只冻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤计技,失蹤者是張志新(化名)和其女友劉穎喜德,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垮媒,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舍悯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了睡雇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萌衬。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖它抱,靈堂內(nèi)的尸體忽然破棺而出秕豫,到底是詐尸還是另有隱情,我是刑警寧澤观蓄,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布混移,位于F島的核電站,受9級(jí)特大地震影響蜘腌,放射性物質(zhì)發(fā)生泄漏沫屡。R本人自食惡果不足惜饵隙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一撮珠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦芯急、人聲如沸勺届。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽免姿。三九已至,卻和暖如春榕酒,著一層夾襖步出監(jiān)牢的瞬間胚膊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工想鹰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留紊婉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓辑舷,卻偏偏與公主長得像喻犁,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子何缓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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