目录
前言
这里我重点了解了InnoDB的锁。主要分为表锁和行锁,行锁尤其重要。
对于表锁和行锁,都包括S锁(Share Locks共享锁)和X锁(Exclusive Locks 排他锁)
按数据的操作类型划分
名称 | S锁 | X锁 |
---|---|---|
S锁 | 不互斥 | 互斥 |
X锁 | 互斥 | 互斥 |
可以看到如果一个事务中出现了排他锁X锁,那么不管之后出现了什么锁都会被阻塞,直到这个事务的排他锁被释放或事务超时回滚。
读锁
读锁顾名思义就是进行select操作时加的锁,这时候可以加S锁也可以加X锁。具体操作如下。但是不管加S锁还是X锁,都是只能读不能修改的。
select * from table_name for share; -- mysql8.0以上
select * from table_name lock in share mode; -- mysql5.7
select * from table_name for update;
写锁
写锁顾名思义就是进行增删改insert、delete、update操作的时候,可以加S锁和X锁。具体操作如下。
insert into table_name(r1, r2, r2) values(v1, v2, v2) for update;
按锁的粒度划分
表锁
- 表级别的共享锁和排他锁
- 意向锁
- 自增锁
- 元数据锁(MDL锁)
行锁
- 记录锁
- 间隙锁
- 临键锁
- 插入意向锁