关于 MySQL InnoDB 锁的超全总结

几个月之前,开始深入学习 MySQL 。说起数据库,并发控制是其中很重要的一部分。于是,就这样开起了 MySQL 锁的学习,随着学习的深入,发现想要更好的理解锁,需要了解 MySQL 事务,数据底层的存储方式,MySQL 的执行流程,特别是索引的选择等。

InnoDB 锁一览

先从 MySQL 官网的锁介绍开始,来逐一认识下这些让我们夜不能寐的小王八蛋:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-gap-locks

MySQL加锁实践

间隙锁(Gap Lock)

首先谈谈间隙锁是什么。

间隙锁是专门用于解决幻读这种问题的锁,它锁的了行与行之间的间隙,能够阻塞新插入的操作,同时间隙锁的引入也带来了一些新的问题,比如:降低并发度,可能导致死锁。

这里特别记录下读读不互斥,读写/写读/写写是互斥的,但是间隙锁之间是不冲突的,间隙锁会阻塞插入操作,另外,间隙锁在可重复读级别下才是有效的。

幻读在 MySQL InnoDB 中是被如何解决的?

在MySQL事务初识中,我们了解到不同的事务隔离级别会引发不同的问题,如在 RR 级别下会出现幻读。但如果将存储引擎选为 InnoDB ,在 RR 级别下,幻读的问题就会被解决。在这篇文章中,会先介绍什么是幻读、幻读会带来引起那些问题以及 InnoDB 解决幻读的思路。

实验环境:RR,MySQL 5.7.27

为了后面实验方便,假设在数据库中有这样一张表以及数据,注意这里的 d 列并没索引:


Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :