MySQL有哪些锁?作⽤是什么?

1全局锁

         全局锁主要应⽤于做全库逻辑备份,这样在备份数据库期间,不会因为数据或表结构的更新, ⽽出现备份⽂件的数据与预期的不⼀样,加上全局锁,意味着整个数据库都是只读状态。

2. 表级锁 ● ● ●

元数据锁(MDL):对数据库表进⾏操作时,会⾃动给这个表加上元数据锁,为了保证当 ⽤户对表执⾏ CRUD 操作时,其他线程对这个表结构做了变更。元数据锁在事务提交后才 会释放。

意向锁:对某些记录加上共享锁之前,需要先在表级别加上⼀个意向共享锁,对某些纪录 加上独占锁之前,需要先在表级别加上⼀个意向独占锁。普通的 select 是不会加⾏级锁 的,普通的 select 语句是利⽤ MVCC 实现⼀致性读,是⽆锁的。

AUTO-INC 锁:表⾥的主键通常都会设置成⾃增的,之后可以在插⼊数据时,可以不指定 主键的值,数据库会⾃动给主键赋值递增的值通过 AUTO-INC 锁实现的。在插⼊数据 时,会加⼀个表级别的 AUTO-INC 锁,然后为被 AUTO_INCREMENT 修饰的字段赋值递 增的值,等插⼊语句执⾏完成后,才会把 AUTO-INC 锁释放掉。其他事务的如果要向该表 插⼊语句都会被阻塞,从⽽保证插⼊数据时字段的值是连续递增的。

3. ⾏锁 ● ● ● ●

记录锁:锁住的是⼀条记录,记录锁分为排他锁和共享锁。

间隙锁:只存在于可重复读隔离级别,⽬的是为了解决可重复读隔离级别下幻读的现象。 间隙锁之间是兼容的,两个事务可以同时持有包含共同间隙范围的间隙锁,并不存在互斥 关系。

Next-Key Lock:Next-Key Lock临键锁,是 Record Lock + Gap Lock 的组合,锁定⼀ 个范围,并且锁定记录本身。next-key lock 即能保护该记录,⼜能阻⽌其他事务将新纪录 插⼊到被保护记录前⾯的间隙中。

插⼊意向锁:⼀个事务在插⼊⼀条记录的时候,需要判断插⼊位置是否已被其他事务加了 间隙锁(next-key lock 也包含间隙锁)。如果有的话,插⼊操作就会发⽣阻塞,直到拥有 间隙锁的那个事务提交为⽌,在此期间会⽣成⼀个插⼊意向锁,表明有事务想在某个区间 插⼊新记录,但是现在处于等待状态。

  • 24
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值