日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL系列: undo和redo工作原理

發布時間:2023/12/10 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL系列: undo和redo工作原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ACID

首先來討論事務的四大特性ACID

  • 原子性(Atomicity):事務作為一個整體來執行,要不都執行,要不都不執行

  • 一致性(Consistency):事務必須保證數據庫從一個一致狀態轉移到另一個一致狀態。不能破壞關系數據的完整性以及業務邏輯的一致性。

    完整性一般就是數據的域完整性、實體完整性以及參照完整性。域完整性始址我們在創建表的時候指定的數據類型,輸入限制。實體完整性規定我們的記錄必須唯一,也就是說一個記錄中必須存在一個或者多個字段唯一標示這一條記錄。參照完整性則一般對應于關系表之間的關系,保證主鍵和外鍵之間的參照關系。不能因為執行事務兒破壞數據的完整性。

    邏輯業務一致性舉個例子。再銀行轉賬操作中,a、b初始值1000,a像b轉100,但是不能因為我們的事務操作使得b只收到了50。事務要保證業務操作中我們的業務一致性不能亂。

  • 隔離性(Isolation):多個事務并發的時候,一個事務執行的時候不會影響另一個事務。

  • 持久性(Durability):已被提交的事務必須保存再數據庫中。

?

Undo(歷史數據,提交前持久化,修改前寫入,保證原子性)

undo日志到底做了什么

undo日志會記錄事務執行過程中,每次修改的數據的原始值。

x =5,y = 8 t1 begin://undo日志記錄x=5x = x- 1;//undo日志記錄y=8y = y-2;//事務執行臨近結束,將undo日志寫入到磁盤//將數據寫入到磁盤 commit

我們都知道,事務是具有原子性的要不全做,要不全部做。可到底是什么機制協助了數據庫

undo日志就可以保證數據庫事務操作的原子性,從上面的流程我們可以得知每次進行事務修改之前,都會吧未修改之前的值存儲到undo日志中,當然再提交的時候也是先將undo寫到磁盤,再把修改后的數據寫到磁盤。倘若再undo寫入磁盤之前發生了異常,根本就不需要做任何操作,這時候事務是被認為執行失敗的,也不需要回滾,因為undo日志沒有寫入磁盤,數據庫被認為處于沒有執行事務的狀態。若再數據寫入磁盤的時候發生故障,則可以根據undo日志進行回滾。

整個過程下來起碼實現了原子性以及持久性

undo操作的特點總結如下:

  • 在更新數據前把數據記錄到undo操作
  • 持久性,只要數據提交則必定保存到了數據庫
  • undo log必須先于數據持久化到磁盤,這樣的話若數據寫入磁盤或者進行commit是出錯,可以根據undo日志進行回滾
  • 若事務再undo持久化之前出錯,則數據庫中的數據還保持在事務之前的狀態。undo日志中也沒有相應的記錄,不需要回滾
  • 當然undo的缺陷也很明顯,他需要提交一次undo日志到磁盤,和一次數據到磁盤。io次數過多,性能太低。

    Redo(新數據,提交前持久化,修改后寫入,保證持久性)

    redo的出現

    為了解決undo性能過低的問題,就引入了redo

    redo與undo正相反,他記錄的是新數據的備份。并且事務在提交的時候只需將redo日志持久化到磁盤即可,數據可以根據redo日志異步的持久到磁盤。當發生異常的時候,只要redo

    總結

    以上是生活随笔為你收集整理的MySQL系列: undo和redo工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。