mysql记录锁与互斥锁区别

2023年 8月 6日 24.1k 0

MySQL中记录锁是针对一行数据进行的锁定,当一个事务对某一行数据进行修改时,MySQL会给该行数据加上记录锁,其他事务无法对该行数据进行修改操作,直到持有该行记录锁的事务提交或者回滚事务。

mysql记录锁与互斥锁区别

而互斥锁是MySQL中一种更为通用的锁,它可以用来保护一段代码或者数据结构,以保证在同一时刻只有一个事务能够访问该数据结构或者代码片段。互斥锁可以由多个事务共享,也可以由一个事务独占。

//示例代码-对单个数据添加记录锁
BEGIN;
SELECT * FROM table WHERE id=1 FOR UPDATE;
UPDATE table SET name='xxx' WHERE id=1;
COMMIT;

//示例代码-使用互斥锁保护代码段
DECLARE mutex_var VARCHAR(64) DEFAULT 'my_mutex';
BEGIN;
SELECT GET_LOCK(mutex_var, 10); --等待最多10秒获取互斥锁
--执行需要互斥保护的代码段(例如插入或更新数据)
--...
SELECT RELEASE_LOCK(mutex_var);
COMMIT;

需要注意的是,使用记录锁在高并发场景下会有锁等待的问题,而使用互斥锁能够最大程度上减少锁等待的时间,提高并发能力。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论