• mysql 事务


    事务 要么全部成功,要么全部失败

    遵循ACID 原则

    原子性

    一致性

    隔离性

    持久性

    MySQL的隔离级别 

    1,RU 读未提交 可以读取未提交的数据

    2,rc 读提交  只能读取已经提交的数据  一般开发设置

    3,rr 可重复读  一个事务中,重复读取数据一致,无论其他事务中是否对当前数据做了修改

    4,serializable 读写都会加锁

    隔离级别脏读不可重复读幻影读
    READ-UNCOMMITTED
    READ-COMMITTED ×
    REPEATABLE-READ × ×
    SERIALIZABLE × × ×

     

    脏读 读取到未提交的数据

    不可重复读 每次读取的数据都不一致, 强调的是修改

    幻读 同一事务查询中,两次查询到的数据条数不一致。因其他事务增删导致   强调的是增删

    MySQL事务的实现

    A 原子性 主要是通过undo Log(回滚日志)实现。当事务回滚时能够撤销所有已经成功执行的sql语句。

    innoDB实现回滚,靠的是undo log,当事务对数据进行修改时,innoDB会生成对应的undo log;如果事务执行失败或调用了rollback,

    导致事务需要回滚。便可以利用undo log中的信息将数据回滚到修改之前的样子。

    C 持久性 通过redolog 实现。MySQL的更新操作都是先写到buffer pool中的,然后再刷新到硬盘中的。

    如果宕机的话,buffer pool数据被清空,则可能导致数据丢失。

    二阶段提交提交,数据更新在写到buffer pool之前先记录redo log(WAL)。这样在buffer pool数据丢失的时候可以通过redo log获取到更新的内容。

    redo log的数据也需要写到磁盘中

    为什么redo log 写入磁盘比buffer pool快。redo log是顺序写入的。buffer pool 刷盘的话是以页为单位(默认16k)进行刷盘的。redo log只包含真正需要写入的部分。内容少于buffer pool刷盘

    I 隔离性  专注于不同事务之间的影响

    写与写之间的隔离 锁来保证

    写与读之间的隔离 MVCC保证

    D 一致性  数据在事务执行前后都是合法的数据状态

    依赖于ACI的实现基础

     

     

     

  • 相关阅读:
    05 DDMS中logcat的使用
    04项目的目录结构分析与资源引用
    03 Android之我的第一个.hello world 程序
    关于myeclipse的有关操作
    jsp运行原理分析
    JSP简介
    prepareStatement与Statement的区别
    正则表达式
    过滤器的作用和用法
    剑指Offer--数值的整数次方
  • 原文地址:https://www.cnblogs.com/luoying/p/14601895.html
Copyright © 2020-2023  润新知