登录/注册
张三
2681
占位
0
占位
0
浏览量
占位
粉丝
占位
关注
mysql的锁
张三
2020-11-26 15:34:53 2020-11-26
73
0

InnoDB锁

本节介绍使用的锁类型 InnoDB

  1. 共享和独占锁

  2. 意向锁

  3. 记录锁

  4. 间隙锁定

  5. next-key锁

  6. 插入意向锁

  7. AUTO-INC锁

  8. 空间索引的谓词锁

共享和独占锁

InnoDB实现标准的行级锁定,其中有两种类型的锁, shared(S)锁exclusive(X)锁

如果事务在行上T1持有一个shared(S)锁r,那么来自某个不同事务T2 的对行锁的请求r将按如下方式处理:

  • 由A请求T2用于 S锁可以立即被授予。其结果是,无论是T1T2 持有S的锁r
  • 通过请求T2一个 X锁不能立即授予。

如果事务在行上T1持有exclusive(X)锁r,则不能立即授予来自某个不同事务T2的锁定任何类型的锁的请求r。相反,事务T2必须等待事务T1释放其对行的锁定r

意向锁

InnoDB支持多粒度锁定,允许行锁和表锁共存。例如,诸如 在指定表上LOCK TABLES ... WRITE进行独占锁定(X锁定)之类的语句 。要在多个粒度级别实现锁定,请InnoDB使用意向锁。意向锁是表级锁,它指示事务稍后对表中的行所需的锁(共享或独占)类型。意向锁有两种类型:

  • 意向共享锁IS)表示事务打算在表中的各个行上设置共享锁。
  • 意向独占锁IX)表示事务打算在表中的各个行上设置独占锁。

例如,SELECT ... FOR SHARE设置IS锁定并 SELECT ... FOR UPDATE设置IX锁定。

意向锁定协议如下:

  • 在事务可以获取表中某行的共享锁之前,它必须首先在表上获取IS锁或更强。
  • 在事务可以获取表中某行的独占锁之前,它必须首先获取表上的IX锁。

表级锁定类型兼容性总结在以下矩阵中。

XIXSIS
X冲突冲突冲突冲突
IX冲突兼容冲突兼容
S冲突冲突兼容兼容
IS冲突兼容兼容兼容

如果请求事务与现有锁兼容,则授予锁,但如果它与现有锁冲突则不会。事务等待,直到释放冲突的现有锁。如果锁定请求与现有锁冲突而无法授予,因为它会导致 死锁,则会发生错误。

意向锁定不会阻止除完整表请求之外的任何内容(例如,LOCK TABLES ... WRITE)。意向锁定的主要目的是显示某人正在锁定行,或者要锁定表中的行。

意向锁定的事务数据SHOW ENGINE INNODB STATUSInnoDB监视器 输出中的以下内容类似:

```sql

T

暂无评论