MySql(锁)

全局锁

使用全局锁,整个数据库会进入只读状态
全局锁主要用于全库逻辑备份

表级锁

表锁

表级别的共享锁,也就是读锁
表级别的独占锁,也就是写锁

对整张表加锁。表级锁除了会限制别的线程读写外,也会限制本线程接下来的读写操作。

元数据锁(MDL)

无需显示的使用MDL,当我们对数据库进行操作时,会自动给这个表加上MDL:

  1. 对一张表进行CRUD操作时,加的是MDL读锁
  2. 对一张表做结构变更操作时,加的是MDL写锁

MDL是为了保证当用户对表执行CRUD操作时,防止其他线程对这个表结构做了变更

MDL在事务提交后才会释放

意向锁

  1. 在InnoDB引擎的表里对某些记录加上共享锁之前,需要先对表级别加上一个意向共享锁
  2. 在InnoDB引擎的表里对某些记录加上独占锁之前,需要先对表级别加上一个意向独占锁

意向锁是表级锁,不会和行级的共享锁和独占锁发生冲突,而且意向锁之间也不会发生冲突,只会和共享表锁和独占表锁发生冲突。

意向锁的目的是为了快速判断表里是否有记录别加锁

AUTO-INC锁

自增锁。对主键的递增赋值主要是通过AUTO-INC锁实现的。

行级锁

普通的select语句是不会对记录加锁的,因为它属于快照读。
S锁:共享锁,读读共享,读写互斥。
X锁:独占锁,写写互斥,读写互斥。

Record Lock(记录锁)

锁的是一条记录,有S锁和X锁之分。

一个事务对一条记录加了S锁之后,其他事务也可以继续对该记录加S锁,但不可加X锁。
一个事务对一条记录加了X锁之后,其他事物不可对该记录加S锁和X锁。

Gap Lock(间隙锁)

锁的是一个范围,但不包含记录本身。
只存在于可重复度隔离级别,目的是为了解决可重复读隔离级别下幻读的现象
间隙锁的目的是防止插入幻影记录而提出的

Next-Key Lock(临键锁)

是** 记录锁 + 间隙锁** 的组合,锁定的是一个范围,并且锁定记录本身

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值