数据库
首页 > 数据库> > 面试系列——Mysql事务与隔离级别

面试系列——Mysql事务与隔离级别

作者:互联网

基础总览

ACID:

  1. 原子性(Atomicity)
  2. 一致性(Consistency)
  3. 隔离性(Isolation)
  4. 持久性(Durability)

脏读:读到了其他事务未提交的数据;

不可重复读:同一事务内,两次相同的查询返回了不同的结果;

幻读:主要针对于新增和删除,在A对一批数据进行修改后,未提交时,B事务新增了一条记录,导致A好像少修改了一条数据一样;

隔离级别

脏读

不可重复读

幻读

读未提交

读已提交

可重复读(默认)

串行化

事务实现原理

基本概念


MVCC相关概念

MVCC增加了两个隐藏列,一个记录事务ID(DB_TRX_ID),一个记录回滚指针(DB_ROLL_PT);


read view读取原则(拿当前事务的事务ID来比较):

  1. 小于min_Id 数据可见
  2. 大于max_Id 数据不可见
  3. 在min_Id和max_Id之间
    1. 若row tx-id在数组中,代表是由还没提交事物生成的,不可见
    2. 若row tx-id不在数组中,代表是由已经提交的事物生成,可见

(如果数据不可见,会根据版本链的DB_ROLL_PT指针找到上一条数据,直到找到可见的数据)


快照读:

RR级别下,普通的select就是快照读;

当前读:

select…lock in share mode(读锁)

select…for update(悲观锁)

update,delete,insert

以上都是当前读;


间隙锁(record lock) + 行锁(gap lock) = 临键锁(next key lock

  1. 临键锁是左开右闭的区间;
  2. 加锁的基本单位是临键锁
  3. 唯一索引 等值查询临键锁升级为行锁
  4. 索引等值查询 不存在的值,向右查询第一个不满足需求的值,临键锁降级为间隙锁
  5. 索引范围查询会产生临键锁

基础概念介绍完了,下面开始进入正题:

读未提交

读已提交(RC)

可重复读(RR)

串行化

标签:事务,隔离,临键,面试,提交,Mysql,ID,select,log
来源: https://blog.csdn.net/zhusihua920712/article/details/118531782