person where id = 1 lock in share mode 尝试获取表写锁:select * from person where id = 1 for update 查看锁状态:SELECT * FROM performance_schema.data_locks 提交事务:COMMIT;在B窗口中,执行以下操作演示表级锁定:锁定表为只读状态:lock tables person read;解锁表:unlock tables;
mysql数据库锁:意向锁
意向锁是MySQL数据库中的表锁,旨在协调行锁与表锁,支持多粒度锁并存,以提升性能。
其主要功能是在事务A持有行锁时,MySQL自动为相关表添加意向锁。这样,当事务B尝试申请表写锁时,无需检查每一行,只需确认是否存在意向锁即可。这显著提高了效率。
意向锁为什么采用表级锁?如果采用行级锁,则需逐行确认;而表级锁仅需一次判断,即可得知表中是否有数据行被锁定,从而提高性能。
通过以下SQL操作展示A窗口中事务的执行流程:
开始事务:START TRANSACTION
获取共享模式的行锁:select * from person where id = 1 lock in share mode
尝试获取表写锁:select * from person where id = 1 for update
查看锁状态:SELECT * FROM performance_schema.data_locks
提交事务:COMMIT;
在B窗口中,执行以下操作演示表级锁定:
锁定表为只读状态:lock tables person read;
解锁表:unlock tables;2024-10-22