zoukankan      html  css  js  c++  java
  • mysql-查询与更新语句是如何执行的(1,2)

    一,一条SQL查询语句是如何执行的

            mysql大体分为server层与存储引擎;server层又分为:连接器、查询缓存、分析器、优化器、执行器;存储引擎层负责数据的存储和提取,支持InnoDB、MyISAM、Memory等多个存储引擎。

            查询缓存一般不建议使用。

    二,一条SQL更新语句是如何执行的

           1, mysql innodb引擎独有的日志:rodolog。更新一条数据的时候,会先把更新记录的操作记录到redolog中并更新内存,然后选择系统空闲的时候把更新操作刷新到磁盘中。redolog是循环写的,当写满时,会把之前的记录删除。所以不能代替binlog(1,是因为只有innodb引擎有。2,是不能持久化)

           2, binlog日志是server层的日志,不是某一个存储引擎独有的。binlog是可以追加写入的,可以用于定期备份恢复。

           3,更新一条sql的流程:写入新行->新行更新到内存中->写入redolog,处于prepare阶段->写binlog->提交事务,处于commit阶段。将redo log的写入拆成了两个步骤:prepare和commit,这就是"两阶段提交"。如果不采用两阶段提交可能会出现:

                                                                                   3.1,先写redolog,再写bin log。如果写binlog前mysql故障,redo log一定会进行更新(InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe。),但是binlog却没有记录。以后进行故障恢复时,会导致数据不一致。

                                                                                   3.2,先写bin log,再写redo log。如果写redo log时mysql故障。更新会失败,事务会回滚。但是binlog却记录了更新记录。如果以后用这个bin log恢复数据的时候,会发现多了一条事物,与原库的值不同。

  • 相关阅读:
    CSS常用记录
    CSS字体图标使用方式
    CSS之多个div一行排列
    Mysql MVCC原理和幻读解决
    第8章 管理还原数据
    第20章 数据的移动
    oracle恢复删除的数据
    第11章 索引的管理与维护
    第10章 管理表
    第19章 归档模式下的数据库恢复
  • 原文地址:https://www.cnblogs.com/enchaolee/p/11592553.html
Copyright © 2011-2022 走看看