GET_LOCK()¶
为当前会话获取指定名称的用户级 advisory 锁,最长等待到给定的超时时间。
语法¶
GET_LOCK(name, timeout)
参数¶
参数 |
说明 |
|---|---|
|
锁名称,不区分大小写,最长 64 个字符,且不能包含 NUL 字节。 |
|
最长等待秒数;设为 |
返回值¶
成功获取锁时返回
1。等待超时仍未获取锁时返回
0。输入无效或执行出错时返回
NULL。
使用说明¶
锁属于会话而非事务,提交或回滚事务不会释放锁。
同一会话重复获取同名锁时采用引用计数。每次获取都需要调用一次
RELEASE_LOCK(),也可以使用RELEASE_ALL_LOCKS()。源码依据:
test/distributed/cases/function/user_lock.sql。
示例¶
DROP DATABASE IF EXISTS get_lock_demo;
CREATE DATABASE get_lock_demo;
USE get_lock_demo;
SELECT GET_LOCK('daily_import', 0) AS acquired;
SELECT IS_USED_LOCK('daily_import') = CONNECTION_ID() AS held_by_current_session;
SELECT RELEASE_LOCK('daily_import') AS released;
DROP DATABASE get_lock_demo;