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