国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 巧家县| 湖南省| 申扎县| 新安县| 清河县| 凭祥市| 宣恩县| 云林县| 长阳| 鞍山市| 永宁县| 连江县| 外汇| 灵石县| 涡阳县| 德江县| 兴国县| 利辛县| 大厂| 福鼎市| 阜平县| 屏山县| 沅江市| 万宁市| 涞水县| 南汇区| 鄂伦春自治旗| 南昌市| 夏邑县| 八宿县| 凤庆县| 保靖县| 周宁县| 吴江市| 乐东| 康定县| 德令哈市| 祁门县| 霞浦县| 额济纳旗| 钟山县|