MySQL 函数和运算符:锁函数
锁函数:
Name | Description |
---|---|
GET_LOCK() | 获取命名锁
“GET_LOCK(str,timeout)”:尝试使用 timeout 秒的超时时间来获得具有由字符串 str 给出的名称的锁。timeout 为负值表示无限超时。锁是排他的。当一个会话举行时,其他会话无法获得相同名称的锁:
重新实现 MDL 的结果是,使用GET_LOCK()获得的唯一命名的锁出现在“Performance Schema metadata_locks”表中: “OBJECT_TYPE”列表示“USER LEVEL LOCK”,而“OBJECT_NAME”列表示锁名称。 在为相同名称获取多个锁的情况下,仅该名称的第一个锁在“metadata_locks”表中注册一行。该名称的后续锁会在该锁中增加一个计数器,但不会获取其他元数据锁。释放名称上的最后一个锁实例后,将删除该锁的“metadata_locks”行。
SELECT GET_LOCK('lock1',10);
SELECT GET_LOCK('lock2',10);
SELECT RELEASE_LOCK('lock2');
SELECT RELEASE_LOCK('lock1');
|
IS_FREE_LOCK() | 命名锁是否空闲
“IS_FREE_LOCK(str)”:检查名为 str 的锁是否空闲可用(即未锁定)。如果锁是空闲的(没有人正在使用锁),则返回1;如果正在使用锁,则返回0;如果发生错误(例如不正确的参数),则返回NULL。
|
IS_USED_LOCK() | 是否使用了命名锁;如果为 true,则返回连接标识符
“IS_USED_LOCK(str)”:检查名为 str 的锁是否正在使用(即已锁定)。如果是这样,它将返回持有该锁的 Client 端会话的连接标识符。否则,它返回NULL。
|
RELEASE_ALL_LOCKS() | 释放所有当前命名的锁
“RELEASE_ALL_LOCKS()”:释放当前会话持有的所有命名锁,并返回释放的锁数(如果没有锁,则返回 0)
|
RELEASE_LOCK() | 释放命名的锁
“RELEASE_LOCK(str)”:释放由“GET_LOCK()”获得的字符串 str 命名的锁。如果释放了锁,则返回1;如果不是由该线程构建的锁(在这种情况下不释放锁),则返回0;如果命名的锁不存在,则返回NULL。
|