MySQL锁



InnoDB

共享锁(shared (S) lock)和 排它锁(exclusive (X) lock)

InnoDB实现了两种类型的行级锁:

  • 共享锁(shared (S) lock):允许持有锁的事务读取一行
  • 排它锁(exclusive (X) lock):允许持有锁的事务更新或删除行

用一张经典的矩阵表格继续说明共享锁和排他锁的互斥关系:

| S | X -|—|— S | 兼容 | 冲突 X | 冲突 | 冲突

  • 如果一个事务对某一行数据加了S锁,另一个事务还可以对相应的行加S锁,但是不能对相应的行加X锁。
  • 如果一个事务对某一行数据加了X锁,另一个事务既不能对相应的行加S锁也不能加X锁。

### 意向锁

| X | IX | S | IS -|—|—-|—|— X | 冲突 | 冲突 | 冲突 | 冲突 IX | 冲突 | 兼容 | 冲突 | 兼容 S | 冲突 | 冲突 | 兼容 | 兼容 IS | 冲突 | 兼容 | 兼容 | 兼容


### Record Locks
### Gap Locks
### Next-Key Locks
### AUTO-INC Locks

加锁语句

  • select ... from: InnoDB引擎采用多版本并发控制(MVCC)的方式实现了非阻塞读,所以对于普通的select读语句,InnoDB并不会加锁【备注1】
  • select ... from lock in share mode:
  • select ... from for update:
  • update ... where ...:


### 备注 **【备注1】**: xxxx sffs

参考 MySQL innodb-locking 《高性能MySQL》 《MySQL技术内幕——InnoDB存储引擎》


文章作者: Gumihoy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gumihoy !
评论
 上一篇
MySQL索引 MySQL索引
数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据                                 —————————— 《维基百科》 索引是存储引擎用于快速找到记录的一种数据结构      
2019-06-12
下一篇 
编译器 vs 解释器:编译器和解释器之间的区别 编译器 vs 解释器:编译器和解释器之间的区别
编译器(Compiler)编译器是一种计算机程序,负责把一种编程语言编写的源码转换成另外一种计算机代码,往往是二进制的形式存在,被称为目标代码(object code)。这个转换的过程通常的目的是生成可执行的程序。 编译器的产出是另外一种代
2019-06-05
  目录