【MySQL】如何理解MySQL的锁(图文并茂,一网打尽)

一、锁的介绍

     锁是计算机协调多个进程或者线程并发访问某一资源的机制。那么如何保证数据并发访问的一致性、有效性是数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,所以数据库中锁的应用极为重要,其复杂度也更高。

锁的分类,以锁的颗粒度为三类:

全局锁:锁定数据库中的所有表。

表级锁:每次操作锁住整张表。

行级锁:每次操作都锁到对应行的数据。

接下来就分别对这几种锁做一个解释。

二、全局锁

1、概念

对整个数据库实例加锁,加锁后整个实例就处于只读状态,对于后面的DML语句,DDL语句,已经更新操作的事务提交语句都会被阻塞。

典型的场景应用:数据备份。对所有的表进行锁定,从而获取数据的一致性,保证数据的完整性。

778841d10929cace3f1e8985dff2762b.png

如图所示,我们加了全局锁之后,使用mysqldump取备份数据的时候,其他客户端的事务是不能执行DML操作、DDL操作的,但可以执行DQL操作,当我们备份好数据后,导出xxx.sql文件后,再解开锁,此时DML操作、DDL操作才生效。

(其中DML操作是指:对数据进行增加、删除、修改操作。DDL操作是指:主要是进行定义/改变表的结构、数据类型、表之间的链接等操作。DQL操作是指:对数据进行查询操作。还有DCL操作是指:主要是用来设置/更改数据库用户权限。)

2、语句

加锁:flush tables with read lock;

解锁:unlock table

3、不足

①:如果在主库上备份,那么备份期间都不能执行更新,业务基本上就停摆了 。

②:如果在从库上备份,那么在备份期间不能执行同步过来的二进制日志洗,会导致延迟。

二、表级锁

对于表级锁,锁定粒度答,发生锁冲突的概率 最高,并发度低。应用在MyISAM、InnoDB、BDB等存储引擎中。

表级锁分为表锁元数据锁意向锁三类。

1、表锁

(1)表共享读锁(read lock)

1e5d87dda5e401a3d48a16b4dce3dfce.png

如图所示有两个客户端Client1、Client2当Client1执行加锁操作后,Client1、Client2都只能执行DQL

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值