最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中的undo日志類型使用

 更新時間:2025年06月26日 08:55:57   作者:在成都搬磚的鴨鴨  
這篇文章主要介紹了MySQL中的undo日志類型,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1、背景

事務(wù)的回滾機制是通過undo日志來實現(xiàn)的,我們只需要對INSRT、DELETE、UPDATE操作記錄回滾日志,SELECT不需要記錄回滾日志,這三種操作對應(yīng)的undo日志類型不同,接下來就來講一下不同的操作對應(yīng)的不同undo日志類型。

2、事務(wù)id

【1】分配時機

事務(wù)分為只讀事務(wù)讀寫事務(wù),可以通過START TRANSACTION READ ONLY語句開啟一個只讀事務(wù):

只讀事務(wù)不可用對普通表進行插入、刪除、更新操作,但是可以對臨時表進行插入、刪除、更新操作,對臨時表進行插入、刪除、更新操作時會分配一個唯一事務(wù)id。

可以通過START TRANSACTION READ WRITE、BEGIN、START TRANSACTION語句開啟一個讀寫事務(wù):

讀寫事務(wù)中可以進行插入、刪除、更新操作,并且在插入、刪除、更新時會創(chuàng)建一個唯一事務(wù)id。

【2】生成方式

事務(wù)id是服務(wù)器內(nèi)存中的一個唯一全局變量,需要分配事務(wù)id時,就把該變量值加1分配給該事務(wù),當(dāng)該值為256的倍數(shù)時,就將該變量的值存到系統(tǒng)表空間的頁號為5屬性為Max Trx ID占用8個字節(jié)的頁中,當(dāng)服務(wù)器下次重啟時,將該值加上256再賦值給全局變量。

【3】隱藏列

之前講過行的組成包含了隱藏列,由三個字段組成:row_id、trx_id、roll_pointer,這3個字段含義如下:

  • row_id:不一定存在,如果沒有主鍵和唯一索引才存在。
  • trx_id:此條記錄對應(yīng)的事務(wù)id。
  • roll_pointer:指向最新的undo日志。

3、INSERT操作對應(yīng)的undo日志

【1】TRX_UNDO_INSERT_REC類型

插入一條記錄,我們要將其回滾的話,最主要根據(jù)其主鍵將它刪掉就可以,插入操作對應(yīng)的回滾undo日志類型就為TRX_UNDO_INSERT_REC,其組成結(jié)構(gòu)如下:

在這里插入圖片描述

字段含義如下:

字段含義
end of record下一條redo日志
undo type日志類型,也就是TRX_UNDO_INSERT_REC
undo noundo日志編號,在事務(wù)中執(zhí)行插入、刪除、更新操作時從0開始遞增
table id表唯一id
主鍵列的存儲空間大小和實際值列表主鍵可以由多個列組成,所以這里以一個列表去存儲
start of record本條redo日志地址

4、DELETE操作對應(yīng)的undo日志

【1】delete mark階段

頁面中的行記錄會根據(jù)記錄頭中的next_record屬性組成單向鏈表,再根據(jù)delete_mask的標志是否刪除,細分成正常記錄鏈表垃圾鏈表,頁的Page Header有一個PAGE_FREE的屬性,指向垃圾鏈表的頭節(jié)點,當(dāng)我們刪除一條正常記錄時,會先經(jīng)歷delete mark階段:

將正常記錄鏈表中被刪除記錄的delete_mask設(shè)置為1,但不會加入垃圾鏈表,在事務(wù)提交之前一直都在正常記錄鏈表中,只是改變標志位。

【2】purge階段

當(dāng)事務(wù)提交之后,就會進入purge階段:

后臺會有線程把正常記錄鏈表中被刪除的記錄移動到垃圾鏈表頭節(jié)點處,然后更新頁面中的一些其它屬性:用戶記錄數(shù)量PAGE_N_RECS、上次插入記錄位置PAGE_LAST_INSERT、垃圾鏈表頭節(jié)點指針PAGE_FREE、頁面中可重用的字節(jié)數(shù)量PAGE_GARBAGE等。

【3】TRX_UNDO_DEL_MARK_REC類型

刪除操作對應(yīng)的undo日志類型為TRX_UNDO_DEL_MARK_REC,其結(jié)構(gòu)如下:

在這里插入圖片描述

字段含義如下:

字段含義
end of record下一條redo日志地址
undo type日志類型,這里是TRX_UNDO_DEL_MARK_REC
undo noundo日志編號
table id表id
info bits記錄頭信息前4個比特位的值以及record_type的值
old trx_id該記錄對應(yīng)上一條undo日志的事務(wù)id
old roll_pointer該記錄對應(yīng)上一條redo日志地址
主鍵列的存儲空間大小和實際值列表主鍵可以由多個列組成,所以這里以一個列表去存儲
index_col_info len索引列信息占用大小
索引列位置存儲空間大小和實際值列表相比于主鍵信息多了一個位置信息
start of record代表本條redo日志

5、UPDATE操作對應(yīng)的undo日志

【1】不更新主鍵

不更新主鍵的方式分為就地更新先刪除舊記錄,再插入新記錄,這兩種更新方式對應(yīng)的undo日志類型都為TRX_UNDO_UPD_EXIST_REC,就地更新指的是:

更新的列更新前后占用的存儲空間都一樣大,就直接在舊記錄上進行更新。

先刪除舊記錄,再插入新記錄指的是:

更新的列更新前后有一個列存儲空間發(fā)送變化,就將舊的記錄直接移動到刪除鏈表,然后判斷更新之后的記錄占用的空間小于原來的空間,那就直接重用垃圾鏈表中的空間;否則就在頁面分配一塊新的空間,如果空間不夠,就進行頁分裂,再插入新記錄。

TRX_UNDO_UPD_EXIST_REC類型結(jié)構(gòu)如下:

在這里插入圖片描述

其字段含義如下:

字段含義
end of record下一條redo日志地址
undo type日志類型,這里是TRX_UNDO_UPD_EXIST_REC
undo noundo日志編號
table id表id
info bits記錄頭信息前4個比特位的值以及record_type的值
old trx_id該記錄對應(yīng)上一條undo日志的事務(wù)id
old roll_pointer該記錄對應(yīng)上一條redo日志地址
主鍵列的存儲空間大小和實際值列表主鍵可以由多個列組成,所以這里以一個列表去存儲
n_updated更新列的數(shù)量
被更新列更新前位置存儲空間實際值列表更新前的列的位置、存儲空間、實際值
index_col_info len索引列信息占用大小
索引列位置存儲空間大小和實際值列表相比于主鍵信息多了一個位置信息
start of record代表本條redo日志

【2】更新主鍵

更新主鍵的場景會前后產(chǎn)生兩條undo日志,分別為刪除舊記錄對應(yīng)的TRX_UNDO_DEL_MARK_REC類型undo日志和插入新記錄對應(yīng)的TRX_UNDO_INSERT_REC類型undo日志。

6、總結(jié)

本文主要講解了插入、刪除、更新分別對應(yīng)的undo日志結(jié)構(gòu),根據(jù)產(chǎn)生的這些undo日志就能進行事務(wù)回滾,具體的回滾方式后面再進行講解。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文讀懂MySQL?表分區(qū)

    一文讀懂MySQL?表分區(qū)

    MySQL自帶了分區(qū)功能,我們可以創(chuàng)建一個帶有分區(qū)的表,而且不需要借助任何外部工具,本文主要了介紹了MySQL表分區(qū),具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
    2022-03-03
  • MySQL的cpu使用率100%的問題排查流程

    MySQL的cpu使用率100%的問題排查流程

    線上mysql服務(wù)器經(jīng)常性出現(xiàn)cpu使用率100%的告警, 因此本文整理一下排查該問題的常規(guī)流程,文中通過代碼示例講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2025-02-02
  • MySQL 使用 SSL 連接配置詳解

    MySQL 使用 SSL 連接配置詳解

    本文給大家分享的是如何配置MySQL支持SSL連接方式的方法以及在docker中配置的具體案例,有需要的小伙伴可以參考下
    2016-12-12
  • Mysql實現(xiàn)null值排在最前/最后的方法示例

    Mysql實現(xiàn)null值排在最前/最后的方法示例

    這篇文章主要給大家介紹了關(guān)于Mysql實現(xiàn)null值排在最前/最后的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • MySQL中的ORDER BY問題

    MySQL中的ORDER BY問題

    這篇文章主要介紹了MySQL中的ORDER BY問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • linux下源碼安裝mysql5.6.20教程

    linux下源碼安裝mysql5.6.20教程

    這篇文章主要為大家詳細介紹了linux下源碼安裝mysql5.6.20教程的相關(guān)資料,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL 實現(xiàn)lastInfdexOf的功能案例

    MySQL 實現(xiàn)lastInfdexOf的功能案例

    這篇文章主要介紹了MySQL 實現(xiàn)lastInfdexOf的功能案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • mysql?timestamp字段規(guī)范使用詳情

    mysql?timestamp字段規(guī)范使用詳情

    這篇文章主要介紹了mysql?timestamp字段規(guī)范使用詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 在MySQL字段中使用逗號分隔符的方法分享

    在MySQL字段中使用逗號分隔符的方法分享

    大多數(shù)開發(fā)者應(yīng)該都遇到過在mysql字段中存儲逗號分割字符串的經(jīng)歷,無論這些被分割的字段代表的是id還是tag,這個字段都應(yīng)該具有如下幾個共性
    2012-06-06
  • MySql索引原理之聯(lián)合索引與最左前綴原則、覆蓋索引及索引條件下推詳解

    MySql索引原理之聯(lián)合索引與最左前綴原則、覆蓋索引及索引條件下推詳解

    本文給大家介紹InnoDB索引機制,包括聯(lián)合索引的最左前綴原則、覆蓋索引優(yōu)化、索引條件下推(ICP)功能及索引失效場景,強調(diào)合理設(shè)計索引可提升查詢效率,避免全表掃描,對mysql最左前綴原則相關(guān)知識感興趣的朋友一起看看吧
    2025-08-08

最新評論

南昌县| 贵德县| 临澧县| 托克托县| 丰原市| 济源市| 改则县| 荔浦县| 英德市| 日喀则市| 江油市| 班戈县| 城市| 莆田市| 连州市| 平武县| 延安市| 新泰市| 石台县| 通江县| 河北省| 汽车| 迁安市| 平乡县| 安康市| 荃湾区| 阿瓦提县| 安徽省| 南平市| 屏南县| 宿迁市| 泰来县| 绥芬河市| 灵山县| 康马县| 万年县| 辽阳市| 民勤县| 始兴县| 翁牛特旗| 阿克苏市|