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解决幻读问题 。
今日份分享已结束 , 请大家多多包涵和指点!
- MySQL|华为不再孤单?国产巨头杀入5G领域,市值暴涨4千亿超越腾讯!
- MySQL|它可能是300元内最值得购入的耳机
- 卢伟冰不讲“武德”,跑分75万+38分钟满电+OIS防抖,12G+256G仅售2364元
- 太阳光到达地球需要8分钟,人一眼就能看到太阳,眼速比光速快?
- MySQL|中企接连行动,苹果始料未及,央媒的呼吁起作用了?
- MySQL|程序员应知应会之MySQL的存储引擎
- MySQL|关于有手机厂商库存严重这件事,我没有证据不敢乱说是哪一家
- MySQL|果然还得是华为,mate50 Pro即将发布,麒麟+鸿蒙3.0+支持5G网络
- MySQL|千元机天花板,120Hz高刷屏+天玑1200处理器,价格绝对是无可比拟的。
- MySQL|为什么懂行的买苹果三星,半懂的华为,外行的买小米?真是这样?
