• 【mysql】- 事务隔离级别和MVCC篇



    概念

    术语

    • 脏写( Dirty Write ): 如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发了脏写
    • 脏读( Dirty Read ) : 如果一个事务读到了另一个未提交事务修改过的数据,那就意味着发了脏读
    • 不可重复读(Non-Repeatable Read): 如果一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值,那就意味着发了不可重复读
    • 幻读(Phantom): 如果一个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来,那就意味着发了幻读

    隔离级别

    • READ UNCOMMITTED :未提交读。
    • READ COMMITTED :已提交读。
    • REPEATABLE READ :可重复读。
    • SERIALIZABLE :可串行化。

    对应隔离级别问题

    • READ UNCOMMITTED 隔离级别下,可能发生脏读不可重复读幻读问题
    • READ COMMITTED 隔离级别下,可能发生不可重复读幻读问题,但是不可以发生脏读问题
    • REPEATABLE READ 隔离级别下,可能发生幻读问题,但是不会发生脏读不可重复读的问题
    • SERIALIZABLE 隔离级别下,各种问题都不可以发生。

    MySQL的默认隔离级别为REPEATABLE READ

    MVCC(多版本并发控制)

    • 在使用READ COMMITTDREPEATABLE READ这两种隔离级别的事务在执行普通的SEELCT操作时访问记录的版本链的过程,这样使可以使不同事务的读-写写-读操作并发执行,从而提升系统性能
    • READCOMMITTDREPEATABLE READ这两个隔离级别的一个很大不同就是:生成ReadView的时机不同,READ COMMITTD在每一次进行普通SELECT操作前都会生成一个ReadViewREPEATABLE READ只在第一次进行普通SELECT操作前生成一个ReadView,之后的查询操作都重复使用这个ReadView就好了
  • 相关阅读:
    go2基本类型
    go1
    android studio 使用
    ios34---GDC,dispatch_once
    ios33--线程通信
    ios33--线程安全
    ios32---线程的状态
    ios31--NSThread
    ios30---pthread, NSThread, GCD, NSOperation
    ios29--多线程
  • 原文地址:https://www.cnblogs.com/lycsmzl/p/13300855.html
Copyright © 2020-2023  润新知