mysql- 锁:全局锁、表锁、行锁

本文介绍了MySQL中的三种锁:全局锁用于全库逻辑备份,表锁用于更新大量行,行锁则更细粒度地控制并发。详细讲解了各锁的使用场景、操作方法及优缺点,还提到了死锁和活锁的概念以及避免策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 MySQL 里,根据加锁的范围,可以分为全局锁、表锁和行锁三类。

全局锁

全局锁也就是对整个数据库加锁

什么时候使用全局锁?
全局锁主要应用于做全库逻辑备份,这样在备份数据库期间,不会因为数据或表结构的更新,而出现备份文件的数据与预期的不一样。

全局锁是怎么用的?
flush tables with read lock;
执行这条命令后,整个数据库就处于只读状态了

怎么释放全局锁?
unlock tables;

加全局锁有什么缺点?
加了全局锁之后,整个数据库都是只读状态,如果数据库里有很多数据,备份就会花费很多的时间,关键是备份期间,业务只能读数据,而不能更新数据,这样会造成业务停滞。

怎么解决?
如果数据库的引擎支持的事务支持可重复读的隔离级别,那么在备份数据库之前先开启事务,会先创建 Read View,然后整个事务执行期间都在用这个 Read View,而且由于 MVCC 的支持,备份期间业务依然可以对数据进行更新操作。

表锁

表锁也就是对某张表加锁

什么时候用表锁?
当需要更新表中的大量行时,可以加表锁,以减少数据库的内部管理操作,提高效率

读锁:当前会话和其它会话都可以读表ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值