mysql事务隔离级别

在这里插入图片描述
默认:Repeatable read 重复读

一、原理

InnoDB 的行数据有多个版本(MVCC),每个数据版本有自己的 row trx_id,每个事务或者语句有自己的一致性视图。普通查询语句是一致性读,一致性读会根据 row trx_id 和一致性视图确定数据版本的可见性。

二、隔离性理解

  • 读为未提交(当前读):一个事务还没有提交时,它做的变更就能被其它事务读取到,总是读取已经提交完成的最新版本;读trx_id最大的数据;
  • 读提交:一个事务提交以后,它做的变更才能被其它事务看到;
  • 可重复读:一个事务执行过程中看到的数据,总是跟这个事务启动时候看到的数据一致。未提交的事务中的变更,其它事务是不可见的。
  • 串行化:顾名思义是同一行记录,“写”会加“写锁”,读会加“读锁”。当出现读、写锁冲突的时候,后访问的事务执行完成,才能继续执行。

三、数据可见性

  • 脏读:事务还未提交时,它做的变更就能被其它事务读取到,可能导致其它线程读取到的数据,与最终落库结果有差异;
  • 可重复读:在一个事务看到(普通查询“快照读”)的数据是一致的;
  • 幻读:在一个事务中,“当前读”看到的数据前后有新数据增加(新插入的行数据),导致不一致;为了解决幻读问题, innoDB引入了间隙锁(Gap Lock),顾名思义 ,是锁住两个值的间隙;

备注:“当前读” 只是在 可重复读隔离级别才有,因为 在其它事务隔离级别下,其它事务提交或未提交时直接 普通查询“快照读”就能读取到最新的数据。在可重读读隔离级别下 update、 for update 悲观锁 等情况会有“当前读”;

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值