【MySQL】锁简介
概述
种类 | 功能 | 锁定粒度 | 加锁效率 | 冲突概率 | 并发性能 | 基本模式(lock mode) |
---|---|---|---|---|---|---|
行锁 | 锁住表里面的一行数据 | 小 | 低 | 小 | 高 | Shared Locks & Exclusive Locks |
表锁 | 锁住一张表中的数据 | 大 | 高 | 大 | 低 | Intention Shared Locks & Intention Exclusive Locks |
共享锁(Shared Locks)
概念
也叫做读锁
,获取了读锁以后,可以读取数据。多个事务可以共享一把读锁。
不要在加上了读锁以后去写数据,不然的话可能会出现死锁的情况
加锁
可以用如下命令手工添加读锁
释放锁
- session断开
- commit
- rollback
验证
如下图所示,事务1对id=1这条数据添加了读锁,事务2还能再对这条数据添加读锁
排他锁(Exclusive Locks)
概念
也叫做写锁
,获取了写锁之后,可以操作数据。
只要一个事务获取了一行数据的写锁,其他的事务就不能再获取这一行数据的写锁和读锁。
加锁
- 自动添加:我们在操作数据的时候,包括增删改,都会默认加上一个排它锁。
- 手工添加:可以用
FOR UPDATE
手工添加写锁
释放锁
- session断开
- commit
- rollback
验证
如下图所示,事务1对id=1这条数据添加了写锁,事务2无法再对这条数据添加写锁和读锁。
意向共享锁(Intention Shared Locks)
意向排他锁(Intention Exclusive Locks)
行锁原理
不使用索引
主键索引
唯一索引
行锁算法
记录锁
间隙锁
临键锁
事务隔离级别的实现
事务隔离级别的选择
查看锁信息(日志)
死锁
锁等待时间
条件
演示
避免死锁
评论区