国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL中InnoDB存儲(chǔ)引擎架構(gòu)的示例剖析

2024-07-24 12:33:40
字體:
供稿:網(wǎng)友
  這篇文章主要介紹MySQL中InnoDB存儲(chǔ)引擎架構(gòu)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
 
  InnoDB組件結(jié)構(gòu):
 
  buffer pool : 緩沖池,緩存磁盤的數(shù)據(jù)
  redo log buffer :記錄對(duì)緩沖池的操作,根據(jù)策略寫入磁盤防止宕機(jī)但事務(wù)已經(jīng)提交而丟失數(shù)據(jù)
  undo log :當(dāng)對(duì)緩沖池的數(shù)據(jù)進(jìn)行修改時(shí),在事務(wù)未提交的時(shí)候都可以進(jìn)行回滾,將舊值寫入 undo 日志文件便于回滾,此時(shí)緩沖池的數(shù)據(jù)與磁盤中的不一致,是臟數(shù)據(jù)
  1. Buffer Pool
  假設(shè)現(xiàn)在有一條更新語句:
 
  update users set name = 'lisi' where id = 1
  需要更新到數(shù)據(jù)庫,InnoDB會(huì)執(zhí)行哪些操作呢?

  2. undo 日志文件
  假設(shè) id = 1 這條數(shù)據(jù)name原來的值 name = 'zhangsan',現(xiàn)在我們要更新為 name = 'lisi' , 那么我們就需要把舊值name='zhangsan'和id=1這些信息寫入到undo日志文件中。
 
  3. 更新buffer pool 數(shù)據(jù)
  在undo日志文件寫入完畢之后,便開始更新內(nèi)存中的這條數(shù)據(jù)。把 id = 1 的 name = 'zhangsan' 更新為 name = 'lisi'。這時(shí)內(nèi)存中的數(shù)據(jù)已經(jīng)更新完畢,但磁盤上的還沒有變化,此時(shí)出現(xiàn)了不一致的臟數(shù)據(jù)。
 
  4. redo log buffer
  在InnoDB結(jié)構(gòu)中,有一個(gè) redo log buffer 緩沖區(qū)存放redo日志,所謂redo日志,例如 把id=1,name='zhangsan'修改為name='lisi' 便是一條日志。
 
  5. 事務(wù)沒提交,數(shù)據(jù)庫宕機(jī)后有影響嗎?
  其實(shí)并沒有影響,事務(wù)沒有提交,意味著執(zhí)行沒有成功,就算MySQL崩潰或者宕機(jī)后,內(nèi)存中的 buffer pool 和 redo log buffer 修改過的數(shù)據(jù)都會(huì)丟失,也并不影響數(shù)據(jù)前后的一致性。如果事務(wù)提交失敗,那數(shù)據(jù)庫的數(shù)據(jù)更加不會(huì)改變。

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 淮滨县| 分宜县| 长寿区| 延川县| 鲜城| 中宁县| 渝中区| 喀喇| 越西县| 禄劝| 丹江口市| 宁城县| 商水县| 福建省| 来凤县| 德江县| 湖州市| 汽车| 河源市| 同江市| 西青区| 壤塘县| 唐山市| 应城市| 哈密市| 沁水县| 辽中县| 元谋县| 石柱| 靖宇县| 林西县| 武邑县| 铁岭县| 白城市| 昌平区| 克拉玛依市| 巴林右旗| 华宁县| 涿鹿县| 承德县| 新绛县|