数据库的隔离级别

一、事务的隔离级别

  1. Atomic 原子性
    事务中被包括的操作看作是一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。、
  2. Consistency 一致性
    事务完成时,事务的状态必须处于一致,数据的完整性约束没有被破坏,如果事务中某些操作发生错误,那么将回滚到最初的状态,就跟没执行过一样。
  3. Isolation 隔离性
    事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性。同时,事务的修改必须和其他并行事务的修改相互独立。
  4. Durability 持久性
    事务结束后,事务的结果必须能够固化。

二、数据库的隔离级别

由低到高分别是 Read uncommitted、Read committed、Repeatable Read、Serializable,这四个级别能够逐个解决脏读、不可重复读、幻读这几类问题。
Mysql默认的隔离级别是Repeatable read(可反复读)。

在这里插入图片描述

  1. Read uncommitted 读未提交
    READ UNCOMMITTED是限制性最弱的隔离级别。由于该级别忽略其它事务放置的锁。使用READ UNCOMMITTED级别运行的事务,能够读取尚未由其它事务提交的改动
    后的数据值,这些行为称为“脏”读。我们所说的脏读,两个并发的事务,“事务A:领导给singo发工资”、“事务B:singo查询工资账户”,事务B读取了事务A尚未
    提交的数据。比方,事务1改动一行,事务2在事务1提交之前读取了这一行。
    假设事务1回滚,事务2就读取了一行没有提交的数据。这种数据我们觉得是不存在的。

  2. Read committed 读提交
    该级别通过指定语句不能读取其它事务已改动可是尚未提交的数据值。禁止运行脏读。在当前事务中的各个语句运行之间,其它事务仍能够改动、插入或删除数据。
    从而产生无法反复的读操作。或“影子”数据。比方,事务1读取了一行。事务2改动或者删除这一行而且提交。假设事务1想再一次读取这一行,它将获得改动后的数
    据或者发现这一样已经被删除。因此事务的第二次读取结果与第一次读取结果不同,因此也叫不可反复读。

    大多数数据库的默认级别就是Read committed。比方Sql Server , Oracle。怎样解决不可反复读这一问题。请看下一个隔离级别。

  3. Repeatable read 反复读
    REPEATABLE READ是比READ COMMITTED限制性更强的隔离级别。

    该级别包含READ COMMITTED,而且另外指定了在当前事务提交之前。其它不论什么事务均不能够改动或删除当前事务已读取的数据。并发性低于 READ COMMITTED。
    由于已读数据的共享锁在整个事务期间持有,而不是在每一个语句结束时释放。
    这个隔离级别仅仅是说,不可以改动和删除,可是并没有强制不能插入新的满足条件查询的数据行。
    此可以得出结论:REPEATABLE READ隔离级别保证了在同样的查询条件下,同一个事务中的两个查询。第二次读取的内容肯定包换第一次读到的内容。
    注:Mysql的默认隔离级别就是Repeatable read。

  4. 反复读与幻读

    反复读是为了保证在一个事务中,相同查询条件下读取的数据值不发生改变,可是不能保证下次相同条件查询。结果记录数不会添加。

    幻读就是为了解决问题而存在的,他将这个查询范围都加锁了。所以就不能再往这个范围内插入数据。这就是SERIALIZABLE 隔离级别做的事情。

  5. Serializable 序列化
    SERIALIZABLE 是限制性最强的隔离级别,由于该级别锁定整个范围的键。并一直持有锁,直到事务完毕。该级别包含REPEATABLE READ。并添加了在事务完毕之前,
    其它事务不能向事务已读取的范围插入新行的限制。比方,事务1读取了一系列满足搜索条件的行。事务2在运行SQL statement产生一行或者多行满足事务1搜索条
    件的行时会冲突。则事务2回滚。这时事务1再次读取了一系列满足同样搜索条件的行。第二次读取的结果和第一次读取的结果同样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值