MySql数据库的隔离级别讲解

事务的四大特性(ACID)

1.原子性(Atomicity):
事务开始后开始操作,要么全部做完,要么全部不做。事务是一个不可分割的整体。事务在执行过程中出错,会回滚到事务开始之前的状态,以此来保证事务的完整性。类似于原子在物理上的解释:指化学反应不可再分的基本微粒,原子在化学反应中不可分割。
2.一致性(Consistency):
事务在开始和结束后,能保证数据库完整性约束的正确性即数据的完整性。比如经典的转账案例,A向B转账,必须保证a扣了钱,b一定能收到钱。
3.隔离性
事务之间完全隔离,互相不进行干扰,比如a在进行银行卡转账时,在转入结束之前是不允许其他针对此卡操作的
4.持久性
事务对数据的影响是永久的,通俗的解释为事务完成之后,对数据的所有修改都要进行持久化。事务一旦完成是不可逆的,在数据库的表现上为事务一旦完成就是无法被回滚的。

并发问题

1.脏读:
一个事务读取另外一个事务中没有提交的数据被称为脏读。
例如:事务a将表中的一条数据进行修改,未做提交,事务b此时读到了数据,a事务进行回滚,那么事务b读到的数据又称为脏数据
2.不可重复读
一个事务在一次事务中多次读出的同一数据存在不一致情况
例如:事务b在事务中先查询了一次数据,然而事务a修改了查询的结果并进行提交,此时事务b并未提交,又查询了一次,这样查询的结果很有可能出现两次不一致的情况
3.幻读
两个事务操作同样的表,一个事务在事务期间进行新增了数据,对于另外一个事务而言并不能知晓,另外一个事务也进行插入操作,此时会导致失败,好像出现幻觉一样

MySql四种事务隔离级别:

在这里插入图片描述

sql演示四种隔离级别

1.读未提交(会产生脏读)
将事务隔离级别设置为read uncommitted(读未提交)
在这里插入图片描述
首先在事务a中查询test,此时只有3条数据
在这里插入图片描述
然后在事务b中插入一条数据,并未提交:
在这里插入图片描述
此时在事务a中查到了4条数据,也就是说事务a查到了事务b未提交的数据:
在这里插入图片描述
此时如果事务b进行回滚,
在这里插入图片描述
我们发现事务a中再次查询,事务b中新增的那条数据并不存在了
在这里插入图片描述
在这个过程中,事务b中新增的那条数据就属于脏数据.我们可以把事务隔离提升为读已提交(read commit)来解决这个问题.

2.读已提交(会产生幻读)
将事务隔离级别调整为read committed(读已提交)
在这里插入图片描述
在事务b中进行查询
在这里插入图片描述
在事务a中插入一条数据,并未提交
在这里插入图片描述
此时在事务b中查不到该条数据
在这里插入图片描述
此时事务a进行提交
在这里插入图片描述
事务b再次读取
在这里插入图片描述
我们发现事务b在一个事务还未提交的过程读取两次的结果并不一致,这种情况被称为不可重复度,可以把事务级别提升为可重复度(repeatableread)来处理

3.可重复读(会产生幻读)
首先我们将事务隔离级别提升为可重复度(repeatable read)
在这里插入图片描述
首先我们在事务b中进行查询
在这里插入图片描述
我们在事务a中进行新增一条数据并进行提交
在这里插入图片描述
遗憾的是,此时在事务b中,无法看到这条记录
在这里插入图片描述
事务b也想进行新增操作,但是此时却被告知主键已被占用
在这里插入图片描述
事务b无法看到新增的数据,也无法进行插入操作,报了错是自己无法看到的,就好像幻觉一样,因此被称为幻读,幻读可以通过事务隔离级别升为序列化(serializable)来解决

4.序列化(不会出现并发问题,但是效率极低)
首先我们将事务隔离级别设置为序列化
在这里插入图片描述
我们在事务b中进行一次查询:
在这里插入图片描述
在事务a中插入一条数据不进行提交
在这里插入图片描述
此时在事务b中也做新增操作:
在这里插入图片描述
结果发现超时报错,因此可以判断事务a进行操作的过程中,由于事务未提交,进行了锁表,事务b因此无法进行新增操作。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值