• 简单聊聊事物的四大特性,四大特性的实现原理。


    事物的四大特性?
        ACID
        1.原子性 atomicity
            一个事物是一个不可分割的工作单位,其中的操作,要么都做,要么不做。不存在中间状态。
        2.一致性 consisitency
            事物执行的前后,数据必须处于一种合法的状态。(可以自己定义 ,保持数据的一致性。)
        3.隔离性 lsolation
            多个事物并发执行的时候,事物内部的操作与其他事物是隔离的,并发执行,互不干扰。
        4.持久性 Durability
            事物一旦提交,对数据库的改变是永久性的。不受任何影响。
    
    四大特性的实现原理?
        1.mysql如何保证一致性的?
            两个层面。
    /*        
            1.数据库    通过原子性, 持久性,隔离性,来保证一致性。
                        AID 三大特性,是前提。
            2.应用层面    通过代码判断数据库数据是否有效,然后再决定是回滚还是提交数据。
    */
    
        2.mysql怎怎么保证原子性的?
        /*
    1.利用innodb的undo log。 叫做回滚的日志
    
            当事务回滚的时候,能够撤销所有已经成功执行的SQL语句,需要记录你要回滚的响应日志
    2.举例说明        
            当你update一条数据,需要记录之前的旧值,回滚的时候,根据旧值进行update操作。
                
            undo log 记录了这些回滚需要的信息,当事务执行失败,就可以以利undo log 中的信息
            将数据回滚到修改之前的样子。
        */
            
        3.mysql怎么保持久性的?
        /*
    1.        是利用innodb 的 redo log。、
    
            mysql把磁盘上的数据加载到内存中,在内存中对数据进行修改,在刷回磁盘上。
            此时宕机,内存中的数据就会丢失。
            
    2.如何避免宕机?        
            在事物提交之前将数据写入磁盘中。--------【引发的问题。】》只修改一个页面里的一个字节,就要将整个页面刷入磁盘,太浪费资源了
            
            毕竟一个事务里的SQL可能牵涉到多个数据页的修改,而这些数据页可能不是相邻的,
            也就是属于随机IO。显然操作随机IO,速度会比较慢。
            
    3.采用redo log?
            做数据修改的时候,不仅在内村中操作,还会在redo  log 中记录这次操作,
            提交事物的时候,会将redo log 日志进行刷盘 redo log 一部分在内存中,一部分在磁盘上。
            数据库宕机重启,就将redo log中的内容恢复到数据库中,再根据undo log 和binlog 内容决定
            回滚还是提交数据。
    4.好处?    
            redo log 体积小,只记录了那一页修改了什么,体积小,刷盘快。
            一直往末尾进行追加,属于顺序io.效率比随机io来快。
        */
        
        4.mysql怎么保证隔离性的。
    /*
        利用锁 和mvcc 机制。
        
        MVCC,即多版本并发控制(Multi Version Concurrency Control),
        一个行记录数据有多个版本对快照数据,这些快照数据在undo log中。
        
        如果一个事务读取的行正在做DELELE或者UPDATE操作,
        读取操作不会等行上的锁释放,而是读取该行的快照版本。
        
        在事务隔离级别为读已提交(Read Commited)时,一个事务能够读到另一个事务已经提交的数据,
        是不满足隔离性的。但是当事务隔离级别为可重复读(Repeateable Read)中,是满足隔离性的。
    */    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
  • 相关阅读:
    Api记录
    选择排序、冒泡排序、二分查找(折半查找)
    inline关键字
    c++,虚函数,单继承,多继承虚表剖析
    关于类模版迭代器提出时的错误
    关于类模版迭代器提出时的错误2
    菱形继承,多继承,虚继承、虚表的内存结构全面剖析(逆向分析基础)
    VC++错误调试
    引用计数
    选择
  • 原文地址:https://www.cnblogs.com/ZXF6/p/11691969.html
Copyright © 2020-2023  润新知