1.MySQL服务器逻辑架构
图片来源:MySQL官网
每个连接都会在MySQL服务端产生一个线程(内部通过线程池管理线程)。比如:一个select语句进入,MySQL首先会在查询缓存中查找是否缓存了这个select结果集,如果没有则继续执行解析→优化→执行得过程;否则会直接从缓存中获取结果集。
2.MySQL锁
2.1共享锁与排他锁(Shared and Exclusive Locks)
共享锁和排他锁都是标准的行级锁。
1)共享锁S:标准的读锁,读锁允许多个连接可以同一时刻并发的读取同一资源,互不干扰。
2)排他锁X:又称写锁,一个写锁会阻塞其他的写锁或读锁,保证同一个时刻只有一个连接可以写入数据,同时防止其他用户对这个数据的读写。
锁类型 | 英文名 | 又称 | 同一时刻 | 共同点 |
---|---|---|---|---|
共享锁S | Shared Locks | 读锁 | 同一时刻,允许多个连接并发的读取同一资源,互不干扰。 | 两者都是锁机制本身的策略,通过这两种策略对锁进行了区分 |
排他锁X | Exclusive Locks | 写锁 | 同一时刻只有一个连接可以写入数据,同时防止其他用户对这个数据的读写。 | 同上 |
2.2意向锁(Intention Locks)
InnoDB支持多粒度锁(锁粒度:可分为行锁和表锁),允许行锁和表锁共存。