个人主页:SueWakeup
系列专栏:学习技术栈
个性签名:保留赤子之心也许是种幸运吧
目录
本系列专栏
1. MySQ 中的锁
2. 表锁和行锁
表锁
行锁
3. InnoDB 存储引擎的三种行级锁
4. 悲观锁和乐观锁的区别
悲观锁
乐观锁
注:手机端浏览本文章可能会出现 “目录”无法有效展示的情况,请谅解,点击侧栏目录进行跳转
本系列专栏
1.数据库排名
2.【MySQL】数据库开篇
3.【MySQL】索引篇
4.【MySQL】事务篇
5.【MySQL】锁篇
1. MySQ 中的锁
锁的分类 | 描述 |
---|---|
按属性分类 |
|
按粒度分类 |
|
按状态分类 |
|
2. 表锁和行锁
表锁
MySQL
中锁定粒度最大的一种锁- 实现简单,资源消耗少,加锁快,不会出现死锁
- 触发锁冲突概率高,并发度最低
行锁
MySQL
中粒度最小的一种锁- 只针对当前操作的行进行加锁,大大减少数据库操作的冲突
- 加锁的开销大,加锁慢,会出现死锁
- 加锁粒度最小,并发度高
3. InnoDB 存储引擎的三种行级锁
- Record lock:记录锁,单个行记录上的锁
- Gap lock:间隙锁,锁定一个范围,不包括记录本身
- Next-key lock:Record+Gap 临键锁,锁定一个范围,包含记录本身
4. 悲观锁和乐观锁的区别
悲观锁
总是假设最坏的情况,每次读取数据都默认其他事务会修改数据,会进行加锁操作,操作之后释放锁
乐观锁
一般情况不会造成冲突,在数据进行提交更新时,才会对数据的冲突与否进行检查,一般是通过版本号控制,适用于读多写少的场景