GET_LOCK()

为当前会话获取指定名称的用户级 advisory 锁,最长等待到给定的超时时间。

语法

GET_LOCK(name, timeout)

参数

参数

说明

name

锁名称,不区分大小写,最长 64 个字符,且不能包含 NUL 字节。

timeout

最长等待秒数;设为 0 表示立即尝试。

返回值

  • 成功获取锁时返回 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;

另请参阅