RELEASE_ALL_LOCKS¶
释放当前会话持有的所有用户级 advisory 锁,返回已释放的锁数量。这是 MatrixOne 扩展 函数——MySQL 在会话关闭时自动释放锁,但不提供一次性释放全部锁的等价函数。
语法¶
RELEASE_ALL_LOCKS()
参数¶
该函数不接受任何参数。
返回值¶
返回已释放的锁数量(
BIGINT)。若会话未持有任何锁,返回
0。
使用说明¶
RELEASE_ALL_LOCKS()释放当前会话通过GET_LOCK()获取的所有命名 advisory 锁,不 影响其他会话持有的锁。调用
RELEASE_ALL_LOCKS()后,对于之前持有的锁,IS_USED_LOCK()返回NULL, 且IS_FREE_LOCK()返回1。锁也会在会话结束时自动释放。
示例¶
DROP DATABASE IF EXISTS release_all_locks_demo;
CREATE DATABASE release_all_locks_demo;
USE release_all_locks_demo;
-- 获取多个锁
SELECT GET_LOCK('lock_a', 0);
-- 返回 1
SELECT GET_LOCK('lock_b', 0);
-- 返回 1
-- 验证锁已被持有
SELECT IS_USED_LOCK('lock_a') IS NOT NULL;
-- 返回 1
SELECT IS_USED_LOCK('lock_b') IS NOT NULL;
-- 返回 1
-- 一次性释放所有锁
SELECT RELEASE_ALL_LOCKS();
-- 返回 2(释放了两个锁)
-- 验证锁已空闲
SELECT IS_FREE_LOCK('lock_a');
-- 返回 1
SELECT IS_FREE_LOCK('lock_b');
-- 返回 1
-- 无锁时再次调用
SELECT RELEASE_ALL_LOCKS();
-- 返回 0
-- 获取单个锁并全部释放
SELECT GET_LOCK('lock_c', 0);
SELECT RELEASE_ALL_LOCKS();
-- 返回 1
DROP DATABASE release_all_locks_demo;