zoukankan      html  css  js  c++  java
  • Mysql是如何保证原子性和持久性的总结

    1、Mysql怎么保证原子性的?
    OK,是利用Innodb的undo log。
    undo log名为回滚日志,是实现原子性的关键,当事务回滚时能够撤销所有已经成功执行的sql语句,他需要记录你要回滚的相应日志信息。

    例如:
    (1)当你delete一条数据的时候,就需要记录这条数据的信息,回滚的时候,insert这条旧数据
    (2)当你update一条数据的时候,就需要记录之前的旧值,回滚的时候,根据旧值执行update操作
    (3)当年insert一条数据的时候,就需要这条记录的主键,回滚的时候,根据主键执行delete操
    undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

    2.mysql是如何保证持久性的?
    是利用了redo log。Mysql是先把磁盘上的数据加载到内存中,在内存中对数据进行修改,再刷回磁盘上。如果此时突然宕机,内存中的数据就会丢失。redo log包括两部分:一是内存中的日志缓冲(redo log buffer),该部分日志是易失性的;二是磁盘上的重做日志文件(redo log file),该部分日志是持久的。innodb通过force log at commit机制实现事务的持久性,即在事务提交的时候,必须先将该事务的所有事务日志写入到磁盘上的redo log file和undo log file中进行持久化。也就是说提交了两个日志文件。

  • 相关阅读:
    Ubuntu Java环境变量配置
    Ubuntu 获得超级用户权限
    ubuntu 修改主机名
    NGSQC toolkit
    MySQL 常用命令
    Yii的事件和行为的区别和应用
    YII使用PHPExcel导入Excel文件的方法
    Yii: 扩展CGridView增加导出CSV功能
    YII中使用SOAP一定要注意的一些东西
    Yii 多表关联relations
  • 原文地址:https://www.cnblogs.com/jelly12345/p/14333863.html
Copyright © 2011-2022 走看看