MySQL|8分钟带你深入了解MySQL是如何利用索引的,网友:大师,我悟了( 三 )
具体怎么锁 , 根据查询条件是走唯一索引还是非唯一索引 , 是走等值匹配还是范围匹配有不同的gap lock lock的范围 , 但一个原则就是:保证你这个语句的查询范围内的数据不会被其他事务insert进去 。
事务的两段锁:
在事务的执行过程中 , 随时可以进行锁定 , 但只有事务执行完毕commit或者rollBack的时候 , 才会释放锁 。
MVCC 多版本并发控制前面说锁分为读锁和写锁 , 这是一种悲观锁 , MVCC是一种乐观锁 , 通过版本号控制 , 读副本的方式 , 来使得select读不用加锁 , 每次都读副本 , 同时保证读到的都是事务开始之前写入的数据 。
因为大多数数据库操作都是读多写少的 , 通过MVCC , 读操作不用加锁 , 减少了锁冲突的概率 , 提高吞吐 。 select和事务又有啥关系呢?对于mysql , 默认是auto-commit模式 , 如果不显示地开启一个事务 , 每个查询都被当作一个事务来执行 。
mvcc怎么实现的
- 每条记录后面增加两个version , 创建version和删除version 。
- 对于select语句 , 只筛选那些创建version小于等于事务version(保证查询到的记录在当前事务开始之前就已经存在了) , 且删除version在当前version之后的(保证记录在当前事务开始的时候 , 未被删除) 。
- insert 语句:插入新一行 , 创建version等于当前事务version 。
- update语句:新插入一行 , 创建version等于当前事务version , 之前行的删除version设置为当前事务version 。
- delete语句: 当前行的删除version设置为当前事务version 。
select语句读的是快照 , 通过读快照 , 在RR级别也不会有幻读 , 对于select for update这种当前读 , 通过next-key lock解决幻读问题 。
今日份分享已结束 , 请大家多多包涵和指点!
- 高通骁龙|首批骁龙8旗舰谁更值得买?懂行人带你客观分析每台新机亮点
- 荣耀MagicV能否成折叠屏手机新拐点?带你体验
- 中新网北京1月15日电 “既是大屏|荣耀Magic V能否成折叠屏手机新拐点?带你体验
- Java|带你入门Java之每日3分钟Java——数据类型和常量变量
- watchgt|带你入门Java之IDEA的插件安装
- MySQL|mysql 分组查询和聚焦函数,教你更高级—DBA技能包04
- 电池|充电8分钟续航400公里已经打卡,圆柱形电池是未来?
- 酷睿处理器|雷神12代酷睿主机没有独显3599元:这价格划算吗?带你算一算
- MySQL|“人肉”网暴频发,平台岂能无责?
- Java|带你入门Java之IDE的选取