ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2021-07-06 23:35:00  阅读:165  来源: 互联网

标签:事务 隔离 临键 面试 提交 Mysql ID select log


基础总览

ACID:

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

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

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

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

隔离级别

脏读

不可重复读

幻读

读未提交

读已提交

可重复读(默认)

串行化

事务实现原理

基本概念

  • LBCC:基于锁的并发控制;
  • MVCC:多版本的并发控制;

MVCC相关概念

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

  • DB_TRX_ID:事务ID,依次递增;
  • DB_ROLL_PT:指向上一个版本undo log的指针,会形成undo log history list;
  • Undo log:事务的备份日志,insert和update都会产生undo log;
  • Read view:一致性视图,MVCC下,每次读都会产生read view;
  • Purge:undo log的清理线程,按照配置策略来清理undo log;
  • m_ids:当前活跃的事务ID列表;其中,最大的ID是max_id,最小的min_id
  • DML:SELECT、UPDATE、INSERT、DELETE;
  • DDL:比DML要多,主要的命令有CREATE、ALTER、DROP等;

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)

  • 每次select都会生成一次新的read view
  • RC级别下,不会加间隙锁

可重复读(RR)

  • 一直沿用第一次select产生的read view,当前事务session生效;
  • select不加锁时,是快照读不会产生幻读
  • update没有命中索引时,会锁全表
  • insert只加意向锁(隐式锁),只有发生冲突时才加锁;
  • 快照读当前读 混合使用时,会产生幻读

串行化

  • 都是悲观锁;

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有