目录

前言

这里我重点了解了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;




按锁的粒度划分

表锁

  1. 表级别的共享锁和排他锁
  2. 意向锁
  3. 自增锁
  4. 元数据锁(MDL锁)

行锁

  1. 记录锁
  2. 间隙锁
  3. 临键锁
  4. 插入意向锁

页锁

按对待锁的态度

乐观锁

悲观锁

加锁方式

隐式锁

显式锁

全局锁

死锁