zoukankan      html  css  js  c++  java
  • 【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就好了
  • 相关阅读:
    uni-app中使用Echarts绘画图表
    css设置Overflow实现隐藏滚动条的同时又可以滚动
    JS判断在哪一端浏览器打开
    ElementUI分页Pagination自动到第一页
    第203场周赛
    TreeSet使用
    155 最小栈
    234 回文链表
    141 环形链表
    2 两数相加
  • 原文地址:https://www.cnblogs.com/lycsmzl/p/13300855.html
Copyright © 2011-2022 走看看