zoukankan      html  css  js  c++  java
  • MySQL 隔离级别

    事务是单独的一部分 ,这个事务操作的数据已经是在普通的数据之外的,按理来说,他不会被别的东西所影响,也不会影响其他的。

    可串行化比较好理解:就是给读取的每一行数据都加上锁,这样万事皆善。

    未提交读:脏读。事务A读取到了事务B未提交的但是已经被事务B修改过的数据,被在此之上对该数据进行了修改,如果事务B回滚了,事务A读取的事务无效,不符合一致性要求。

    可重复读:会产生幻读,就是同一个事务中执行同一个查询sql,结果在相同的数据范围内出现的数据记录数比上一次执行的多了几条。这是因为事务A读到了事务B新增加的数据,和提交度一样也是不符合隔离性。

    提交读:这个玩意还有个别名叫不可重复读,就是说事务A在读取某个数据后再次读取该数据时,却发现读出的数据遭到了修改(事务未提交,不会是自己修改的),或者某些记录被删除。因为事务是具有隔离性的,所以这很明显是数据被其他事务修改了。而其他事务的修改导致了本事务的读取数据不一致,不符合隔离性。

    原文:

    下面简单地介绍一下四种隔离级别:

    READ UNCOMMITTED(未提交读)

      在READ UNCOMMITTED 级别,事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这被称为脏读(Dirty Read)。这个级别会导致很多问题,从性能上来说,READ UNCOMMITTED 不会比其他的级别好太多,但却缺乏其他级别的很多好处,除非真的有非常必要的理由,在实际应用中一般很少使用。

    READ COMMITTED(提交读)

      大多数数据库系统的默认隔离级别都是READ COMMITTED(但是MySQL不是)。READ COMMITTED 满足前面提到的隔离性的简单定义:一个事务开始时,只能“看见”已经提交的事务所做的修改。换句话说,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。这个级别有时候也叫做不可重复读(nonrepeatable read),因为两次执行相同的查询,可能会得到不一样的结果。

    REPEATABLE READ(可重复读)

      REPEATABLE READ解决了脏读的问题。该级别保证了在同一个事务中多次读取同样记录的结果是一致的。但是理论上,可重复读隔离级别还是无法解决另一个幻读(Phantom Read)的问题。所谓幻读,指的是当某个事务在读取某个范围内的记录时,会产生幻行(Phantom Row)。InnoDB和XtraDB存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)解决了幻读的问题。本章稍后会做进一步的讨论。

      可重复读是MySQL的默认事务隔离界别。

    SERIALIZABLE(可串行化)

      SERIALIZABLE是最高的隔离级别。它通过强制事务串行执行,避免了前面说的幻读的问题。简单来说,SERIALIZABLE会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用的问题。实际这个隔离应用中也很少用到,只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑采用该级别。

    然后他们有一个表格,可访问修饰符的那种差不多。

    隔离级别        脏读可能性  不可重复读  幻读可能性  加锁读

    READ UNCOMMITTED  YES      YES    YES      NO

    READ COMMITTED    NO      YES    YES      NO

    REPEATABLE READ     NO      NO    YES(但是之前有提过InnoDB和XtraDB通过MVCC解决了幻读问题?)  NO

    SERIALIZABLE      NO      NO      NO      YES

    顺便附上访问修饰符的图,就一个default(无访问修饰符)和protected容易搞混了,protected的不同包子类可以访问,他更接近public,限制更小,而default的不同包子类不能访问,更接近private,限制更大

    访问修饰符  类  包  其他包子类  其他包

    public    yes  yes  yes     yes

    protected  yes   yes  yes      no

    default    yes  yes  no     no

    private    yes  no  no       no

  • 相关阅读:
    Mysql热备份
    win10 上安装虚拟机
    SpringMVC AJAX向后台传递数组参数/实体集合
    解决eclipse中tomcat不加载web项目的问题
    Python 基础第九天
    Python 基础第8天(文件管理)
    Python 基础第七天
    Python 基础第六天
    Python 基础第五天
    Python 基础第四天
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/13700769.html
Copyright © 2011-2022 走看看