全局锁
使用全局锁,整个数据库会进入只读状态
全局锁主要用于全库逻辑备份
表级锁
表锁
表级别的共享锁,也就是读锁
表级别的独占锁,也就是写锁
对整张表加锁。表级锁除了会限制别的线程读写外,也会限制本线程接下来的读写操作。
元数据锁(MDL)
无需显示的使用MDL,当我们对数据库进行操作时,会自动给这个表加上MDL:
- 对一张表进行CRUD操作时,加的是MDL读锁
- 对一张表做结构变更操作时,加的是MDL写锁
MDL是为了保证当用户对表执行CRUD操作时,防止其他线程对这个表结构做了变更
MDL在事务提交后才会释放
意向锁
- 在InnoDB引擎的表里对某些记录加上共享锁之前,需要先对表级别加上一个意向共享锁。
- 在InnoDB引擎的表里对某些记录加上独占锁之前,需要先对表级别加上一个意向独占锁。
意向锁是表级锁,不会和行级的共享锁和独占锁发生冲突,而且意向锁之间也不会发生冲突,只会和共享表锁和独占表锁发生冲突。
意向锁的目的是为了快速判断表里是否有记录别加锁
AUTO-INC锁
自增锁。对主键的递增赋值主要是通过AUTO-INC锁实现的。
行级锁
普通的select语句是不会对记录加锁的,因为它属于快照读。
S锁:共享锁,读读共享,读写互斥。
X锁:独占锁,写写互斥,读写互斥。
Record Lock(记录锁)
锁的是一条记录,有S锁和X锁之分。
一个事务对一条记录加了S锁之后,其他事务也可以继续对该记录加S锁,但不可加X锁。
一个事务对一条记录加了X锁之后,其他事物不可对该记录加S锁和X锁。
Gap Lock(间隙锁)
锁的是一个范围,但不包含记录本身。
只存在于可重复度隔离级别,目的是为了解决可重复读隔离级别下幻读的现象。
间隙锁的目的是防止插入幻影记录而提出的
Next-Key Lock(临键锁)
是** 记录锁 + 间隙锁** 的组合,锁定的是一个范围,并且锁定记录本身