你真的瞭解MySQL的四大特性嗎?

面試官:你瞭解MySQL的四大特性嗎?

生成結果

李三:知道的,MySQL的四大特性即ACID。原子性、一致性、隔離性、持久性。

面試官:嗯,然後了?

李三: 原子性(atomicity)是指一個事務不可分割,要麼全部提交成功,要麼全部失敗回滾; 一致性(consistency)是指一個事務能保證數據庫從一個有效(正確)的狀態“轉移”到另一個有效(正確)的狀態。 隔離性(isolation)指一個事務所做的修改在最終提交以前,對其他事務是不可見的。 持久性(durability)是指事務提交成功,所做的修改就一定會永久保存到數據庫中。

 

面試官:那再詳細談談四大特性是怎麼實現?

生成結果

李三:(幸好我今天看了這篇文章)哦哦哦,簡單來說是這樣的:

  • 原子性是通過undo log日誌保證的。

  • 一致性一般是業務層進行邏輯判斷實現的,比如限定餘額不能爲負。

  • 隔離性是通過多版本併發控制機制實現的。

  • 持久性是通過redo log日誌保證的。

 

面試官:聊聊MySQL的三種日誌?

生成結果

在MySQL中,有三種日誌。分別是redo log、binlog和undo log。

redo log 和 binlog

1、存儲的內容

可以這樣理解,binlog記載的是update/delete/insert這樣的SQL語句,而redo log記載的是物理修改的內容(xxxx頁修改了xxx)。所以在搜索資料的時候也會有這樣的說法:binlog 記錄的是數據的邏輯變化redo log 記錄的是數據的物理變化

2、功能

redo log的作用是實現持久化。數據庫更新寫完內存,如果數據庫掛了,那我們可以通過redo log來恢復內存還沒來得及刷到磁盤的數據,將redo log加載到內存裏邊,那內存就能恢復到掛掉之前的數據了。

binlog的作用是進行複製和恢復

  • 主從服務器需要保持數據的一致性,通過binlog來同步數據。

  • 如果整個數據庫的數據都被刪除了,binlog存儲着所有的數據變更情況,那麼可以通過binlog來對數據進行恢復。

3、載體

redo log是InnoDB引擎特有的。binlog是MySQL的Server層實現的,所有引擎都可以使用。

4、記錄方式

redo log是循環寫的,空間固定會用完;binlog是追加寫入的,一個文件寫滿後會切換到下一個文件而不會去覆蓋以前的日誌。

undo log

undo log主要有兩個作用:回滾和多版本併發控制(MVCC)

在數據修改的時候,不僅記錄了redo log,還記錄undo log,如果因爲某些原因導致事務失敗或回滾了,可以用undo log進行回滾undo log主要存儲的也是邏輯日誌,比如我們要insert一條數據了,那undo log會記錄的一條對應的delete日誌。我們要update一條記錄時,它會記錄一條對應相反的update記錄。

回滾的實現就是找到undo log中對應的相反操作語句執行。 而多版本併發控制則是利用undo log做版本的回退(聊MVCCC時再具體講)

那你再說說多版本併發控制吧

生成結果

那接着聊聊redo log、binlog和undo log的更新過程?

生成結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章