zoukankan      html  css  js  c++  java
  • SQL更新语句的执行

    联系上文SQL查询语句的执行

    查询语句的那一套流程,更新语句也是同样会走一遍。

    更新流程还涉及两个重要的日志模块:

    redo log(重做日志)和 binlog(归档日志)

    redo log:重做日志

    redo log是InnoDB引擎特有的日志

    WAL技术,全称是Write-Ahead Logging

    它的关键点就是先写日志,再写磁盘。

    具体来说,当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里,并更新内存,此时更新就算完成了。

    同时,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。

    write pos是当前记录的位置,一边写一边后移,写到末尾再从头开始。

    checkpoint是当前要擦除的位置,擦除记录前要把记录更新到数据文件。

    InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe

    binlog:归档日志

    Server层也有自己的日志,称为binlog(归档日志)

    两种日志的区别

    • redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。
    • redo log是物理日志,记录的是“数据页具体的修改”。binlog是逻辑日志,记录语句的原始逻辑(语句)
    • redo log是循环写的,空间固定会用完。binlog是可以追加写入的

    prepare和commit,这就是"两阶段提交"。主要是用来保证一致性

    1.prepare阶段,记录修改到redo log

    2.真正的提交commit需要binlog成功之后。

    3.如果binlog未开始或者不完整,事务会回滚。

  • 相关阅读:
    第10组 Beta冲刺(2/5)
    第10组 Beta冲刺(1/5)
    第10组 Alpha事后诸葛亮
    3月7-第十次机试课记录
    3月5-第九次机试课记录
    3月2-第八次机试课记录
    3月1-第六次机试课记录
    2月28-第五次机试课记录
    STL
    2月27-第四次机试课记录
  • 原文地址:https://www.cnblogs.com/ginko/p/11609918.html
Copyright © 2011-2022 走看看