MySQL每日易言-锁

本文介绍了MySQL中的全局锁、表级锁(包括表锁和元数据锁)、行锁以及死锁的概念和处理。强调了在实际开发中合理使用锁以提高性能和避免死锁的重要性。

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

MySQL最开始添加锁是为了处理各种并发场景,但是有些锁的范围较广,不能很好的契合实际的开发需求,因此锁的粒度在不断减小,但是可用性是不断提升,合理的分配锁可以实现高效率访问数据资源,因此MySQL也就衍生出了各种锁。本文参考《MySQL实战45讲》,仅作学习。


一、全局锁

全局锁明面上就是为整个数据库都添加一个锁,最常见的就是当需要对数据库进行全局备份的时候需要去添加一个全局读锁:flush tables with read lock(FTWRL);加锁后DDL和DML操作都会被阻塞,同时事务也无法进行提交。

理论上当我们需要全局备份的时候使用事务(single-transaction)也可以实现的,因为在可重复读的隔离级别下会对当时的库数据打一个快照,可以保证数据一致性。但并不是所有的引擎都有事务的,如MyISAM就不支持事务,也就只能使用加全局读锁去备份。

还有一种方法是设置全局只读:set global readonly=true,但是这种方法有一个很大的弊端:如果使用FTWRL,当数据库发生连接断开时,这个全局读锁会被自动释放,而将库设置为readonly后断开连接后数据库会依然保持readonly,致使数据库长时间处于不可写的情况,可能会影响公司的业务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值