国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

面試官:數據庫事務的ACID靠什么來保證?

數據庫 MySQL
今天咱們一起來看看,MySQL為了達成這四種特性做了一些什么事情。

大家好,歡迎來到Tlog4J課堂,我是Jensen。

面試官:數據庫事務的四大特性是什么?

候選人:ACID,分別指原子性、一致性、隔離性、持久性(得意~)

面試官:那在MySQL的InnoDB中,ACID是怎么保證的呢?

候選人:啊這……

ACID大家耳熟能詳,ACID是指數據庫事務中的基本特性:原子性、一致性、隔離性、持久性,那么這四種特性在MySql中是怎么保證的呢?或者說,在InnoDB存儲引擎中,ACID是怎么實現的呢?這個在學校里的老師可沒教……

那今天咱們一起來看看,MySQL為了達成這四種特性做了一些什么事情。

首先,要回答這個問題得了解清楚MySQL的日志體系,MySQL在InnoDB存儲引擎級別有兩種日志:undo log日志和redo log日志,那在MySQL Server級別又有一個binlog日志,咱們結合這幾個日志來說明ACID特性。

Atomicity原子性保障

事務的原子性指一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

原子性是由undo log日志保證的,它記錄了需要回滾的日志信息,也就是說我們的事務還沒提交需要回滾,那么事務回滾就是根據undo log日志來撤銷已經執行成功的SQL。

說白了,undo log其實就是SQL的反向執行,它記錄了反向執行的SQL語句,把正向語句回滾回去。

Consistency一致性保障

事務的一致性指的是在一個事務執行之前和執行之后數據庫都必須處于一致性狀態。

如果事務成功地完成,那么系統中所有變化將正確地應用,系統處于有效狀態;如果在事務中出現錯誤,那么系統中的所有變化將自動地回滾,系統返回到原始狀態。

一致性是ACID的目的,也就是說,只需要保證原子性、隔離性、持久性,自然也就保證了數據的一致性。

比如說,我們的ID在數據庫中是唯一的,此時插入了一個唯一ID,數據庫會給我們做一個檢查,告訴咱們是否發生了主鍵沖突,如果主鍵沖突數據就無法插入。

另一部分是業務數據的一致性,這需要程序代碼來保證。

比如說轉賬這個場景,假設我要轉賬100元出去,實際上數據庫中只有90元,那這時候就不應該轉賬成功,這種情況通過數據庫是無法保證的,只能由程序來保證。

Isolation隔離性保障

事務的隔離性指的是在并發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間,由并發事務所做的修改必須與任何其他并發事務所做的修改隔離。

事務查看數據更新時,數據所處的狀態要么是另一事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看到中間狀態的數據。

在MySQL中隔離性是通過MVCC多版本并發控制機制來保證的,它是在事務隔離級別中最最重要的一個概念,那它是怎么實現的呢?

多版本并發控制:讀取數據時通過一種類似快照的方式將數據保存下來,這樣讀鎖和寫鎖就不沖突了,不同事務的session會看到自己特定版本的數據,也就是版本鏈,通過版本鏈的概念來達到讀和寫能夠并發進行。

MVCC只在READ COMMITTED(已提交讀)和REPEATABLE READ(可重復讀)兩個隔離級別下工作,其他兩個隔離級別和MVCC不兼容,這是因為READ UNCOMMITTED(讀未提交)總是讀取最新的數據行,而不是符合當前事務版本的數據行,而ZERIALIZABLE(串行化)則會對所有讀取的行都加鎖,MVCC就沒有意義了。

在MySQL的InnoDB下,聚簇索引記錄中有兩個必要的隱藏列:

  1. trx_id:它用來存儲每次對某條聚簇索引記錄進行修改時的事務ID,這個事務ID由MySQL分配。
  2. roll_pointer:每次對哪條聚簇索引記錄有修改的時候,都會把老版本寫入undo日志中,這個roll_pointer就是存了一個指針,它指向這條聚簇索引記錄的上一個版本的位置,通過它來獲得上一個版本的記錄信息(注意插入操作的undo日志沒有這個屬性,因為它沒有老版本)。

OK,理解了這些概念,咱們再來看看MVCC。

已提交讀和可重復讀的區別就在于它們生成ReadView的策略不同。

MVCC就是版本鏈+ReadView所組成的這么一種概念,當我們掌握了版本鏈和ReadView這兩個概念,也就明白了MVCC,我們接著來看看這個ReadView。

我們在開啟事務時創建ReadView,ReadView維護了當前活動的事務ID,即未提交的正在進行中的事務ID,排序生成一個數組訪問數據,獲取需要修改的記錄中的事務ID(獲取的是事務ID最大的記錄),然后去對比ReadView:

  • 如果獲取的事務ID在ReadView的左邊(比ReadView都小),表示可以訪問(在左邊意味著該事務已經提交)。
  • 如果獲取的事務ID在ReadView的右邊(比ReadView都大),或者就在ReadView中,表示不可以訪問,獲取roll_pointer,取上一版本重新對比(在右邊意味著,該事務在ReadView生成之后出現,在ReadView中意味著該事務還未提交)。

已提交讀隔離級別下的事務在每次查詢的開始都會生成一個獨立的ReadView,也就是說我每次select查出來的ReadView都會重新生成,所以ReadView可能會不一樣,就是說讀到的數據就會不一樣;

而可重復讀隔離級別則在第一次讀的時候生成一個ReadView,之后的讀都復用之前的ReadView,每次select查詢都是一樣的。

在這里咱們發現了這兩者的性能是有差別的,MySQL為了提高查詢性能,默認使用了可重復讀這種隔離級別(原因之一)。

這就是MySQL的MVCC,通過版本鏈,實現多版本可并發讀-寫、寫-讀,通過ReadView生成策略的不同實現不同的隔離級別。

Durability持久性保障

事務的持久性指的是只要事務成功結束,它對數據庫所做的更新就必須永久保存下來,即使發生系統崩潰,重新啟動數據庫系統后,數據庫還能恢復到事務成功結束時的狀態。

持久性意味著事務操作最終要持久化到數據庫中,持久性是由 內存+redo log來保證的,MySQL的InnoDB在修改數據的時候,同時在內存和redo log記錄這次操作,宕機的時候可以從redo log中恢復數據。

同時,我們都知道MySQL Server的主從同步就是通過binlog來實現的,從服務器通過binlog文件的SQL拿過去執行一遍,保證跟主服務器的數據一致,而binlog和redo log都存儲了表中的數據,都可以用來做數據恢復的,那怎么保證binlog和redo log的數據一致呢?

下面是InnoDB下redo log的過程:

  1. 對redo log進行寫盤,寫完后事務進入prepare狀態。
  2. 如果前面prepare成功,馬上就會進行binlog寫盤,再繼續將事務日志持久化到binlog。
  3. 如果binlog持久化成功,那么事務則進入commit狀態(在redo log里面寫一條commit記錄)。

這意味著一個事務到底有沒有成功,由兩方面來保證:第一是redo log里面有沒有commit記錄,如果有commit記錄,那么binlog一定是持久化成功了,也就是說事務成功了。

再者就是redo log最終還會進行刷盤,它的刷盤會在系統空閑時進行,并不是寫到redo log時馬上進行刷盤。

以上就是數據庫的基本特性ACID在MySQL中如何進行保證的方法,ACID就是這樣通過InnoDB的幾個日志和MVCC來保證原子性、一致性、隔離性、持久化的。

最后,再問大家一個問題:MySQL是先設計ACID特性才有的底層實現,還是先實現了底層才總結出ACID特性的呢?

責任編輯:姜華 來源: 今日頭條
相關推薦

2025-11-17 01:22:00

2024-09-19 08:10:54

2024-12-30 13:58:14

2010-09-08 15:55:20

SQL事務特性

2025-10-11 08:06:01

數據庫IP 地址IPV4

2021-09-27 07:11:18

MySQLACID特性

2024-02-28 10:14:47

Redis數據硬盤

2023-09-01 15:27:31

2021-06-03 08:55:54

分布式事務ACID

2025-11-10 08:08:26

2024-08-28 11:23:33

2021-10-22 08:37:13

消息不丟失rocketmq消息隊列

2025-11-11 02:11:00

微服務分布式事務

2025-03-10 11:48:22

項目服務設計

2023-12-13 10:11:14

數據庫ACID數據

2021-09-08 08:06:57

Redis原子性數據類型

2021-12-21 07:07:43

HashSet元素數量

2025-10-09 01:22:00

2021-09-07 10:44:33

Java 注解開發

2015-08-13 10:29:12

面試面試官
點贊
收藏

51CTO技術棧公眾號

亚洲丝袜精品| 2019中文字幕在线电影免费| 国产精品亚洲一区二区三区在线| 成人国产精品日本在线| 全球中文成人在线| 亚洲国产精久久久久久| 欧美一级二级三级区| 欧美又粗又大又爽| 色视频在线观看| 亚洲国产日韩综合久久精品| 四虎av网址| 亚洲人成小说网站色在线| 中文字幕av专区| 国产精品美女久久久久高潮 | 激情综合五月| 尤物99国产成人精品视频| 日产福利视频在线观看| 亚洲精品美女久久| 毛片无码国产| 国产午夜精品一区二区三区| 视频精品导航| 欧美国产日韩二区| 免费短视频成人日韩| 国产精品激情av电影在线观看 | 中文字幕精品视频| 日韩经典一区| 国产亚洲激情视频在线| 欧美美女福利视频| 欧美床上激情在线观看| ccyy激情综合| 国产精品com| 亚洲图片在线| 国产成年人在线观看| 成人免费视频一区| 天天综合天天操| 午夜影院久久久| 日本三级在线播放完整版| 精品国产91乱码一区二区三区 | 日本手机在线视频| 久久精品视频免费| 免费特级黄毛片| 欧美日韩亚洲视频| 在线视频婷婷| 欧美xxxx老人做受| 日韩综合在线视频| 久久国产精品视频在线观看| 免费视频一区二区| 黑人另类av| 久久99最新地址| 欧美激情国产精品日韩| 亚洲一区二区高清| 黄色在线观看网站| 午夜精品婷婷| 喜爱夜蒲2在线| 亚洲欧洲综合另类在线| 天堂av中文在线观看| 久久99国产精品一区| 日韩一区二区精品在线观看| 华人av在线| 亚洲三级av在线| 天天超碰亚洲| 91精品视频在线免费观看| 久久久久国产精品一区二区| 日日摸日日碰夜夜爽av| 婷婷国产v国产偷v亚洲高清| hd国产人妖ts另类视频| 97精品久久久| 久久久精品午夜少妇| 国产精品99久久免费黑人人妻| 欧美视频不卡中文| 国产精品久久亚洲不卡| 成人一区二区电影| 粉嫩欧美一区二区三区高清影视| 成视频在线观看免费观看| 精品粉嫩超白一线天av| 国产欧美一区二区精品久久久| 午夜免费电影一区在线观看| 亚洲欧美自拍偷拍| 国产在线88av| 91久久综合亚洲鲁鲁五月天| 成人av一区二区三区| 国产黄色在线| 欧美大片在线免费观看| 男人的天堂成人在线| 国产九一视频| 亚洲日本中文字幕| 午夜精品久久| 男男互摸gay网站| 亚洲人精选亚洲人成在线| 亚洲欧洲美洲一区二区三区| 免费观看日韩毛片| 亚洲伊人观看| 成人性生交大片免费看中文视频| 在线一区亚洲| 欧美精品xxxxbbbb| 亚洲综合免费观看高清完整版在线| av在线1区2区| 国自在线精品视频| 麻豆极品一区二区三区| 一级片在线免费看| 九九精品视频在线| 日韩中文字幕av电影| 色视频在线观看| 欧美亚洲成人精品| 粉嫩久久99精品久久久久久夜| 日本三级视频在线观看| 国产精品美女在线| 国产精品国产精品国产专区不蜜 | 蜜桃视频在线免费| 久久免费国产精品1| 国产成人精品影视| 波多野在线观看| 国产亚洲一区二区三区在线播放| 亚洲免费观看高清完整版在线| 成人午夜在线| 欧美 日韩 国产精品| 欧美精品一区二区三区蜜桃视频 | 久久久久国产视频| 91欧美一区二区| av电影免费在线看| 日韩精品极品视频在线观看免费| 欧美中文字幕一区| 亚洲婷婷在线| 国产在线电影| 3d蒂法精品啪啪一区二区免费| 一级做a爱片久久| 日韩免费中文专区| 亚洲国产成人tv| 国产免费久久| 久草福利资源在线视频| 欧美亚洲国产精品| 成人午夜激情影院| 久久只有精品| 久久久一二三| 99re热精品视频| 国产九一视频| 国产igao激情在线入口| 久久这里只有精品99| 成人三级伦理片| 免费日韩成人| 成人在线激情网| 91大神在线播放精品| 亚洲精品久久久蜜桃| 少妇久久久久| 操操操综合网| 99电影网电视剧在线观看| 欧美日韩在线一区二区| 亚洲专区一区| 久草在线视频网站| 国产乱子伦精品无码专区| 久久久国产一区| 亚洲精品成人a8198a| 国产精品久久亚洲7777| 欧美不卡视频一区发布| 色av手机在线| 在线观看日韩羞羞视频| 亚洲精品丝袜日韩| 99麻豆久久久国产精品免费优播| 国产一区二区视频在线看| 青青草国产精品视频| 激情图片qvod| 亚洲国产经典视频| 亚洲高清av| 日韩在线影院| 精品国产av无码一区二区三区| 中文字幕视频在线免费欧美日韩综合在线看| 91在线视频免费观看| 日韩精品社区| 福利视频在线看| 国产女主播av| 91av视频在线播放| 欧美日韩中文一区| 国产成a人无v码亚洲福利| 国产精品久久久网站| 成人高清免费在线播放| 日韩精品一区二区免费| 热re91久久精品国99热蜜臀| 欧美疯狂做受xxxx富婆| 97久久精品人人澡人人爽| 欧美人与物videos另类xxxxx| av中文字幕在线| 波多野结衣家庭教师在线播放| 国产精品一区二区久久精品| 亚洲国产精品久久久久秋霞蜜臀 | 欧美人与性动交α欧美精品图片| 国产精品入口芒果| 国产欧美一区二区三区在线看| 精品国产伦一区二区三区观看体验| 久久精品男人天堂av| 欧美三级网页| 国产成人免费视频网站视频社区| 性色视频在线| 国产精品va无码一区二区| 亚洲japanese制服美女| 色小说视频一区| 色老汉一区二区三区| av亚洲精华国产精华精| 国产亚洲精品bv在线观看| 国产成人aa在线观看网站站| 日韩欧美精品一区二区三区|