内置函数锁相关
11.9 加锁与解锁函数
MySQL中提供了对数据进行加锁和解锁的函数,这些函数包括GET_LOCK(value,timeout)、RELEASE_LOCK(value)、IS_FREE_LOCK(value)和IS_USED_LOCK(value)函数。
11.9.1 GET_LOCK(value,timeout)函数
GET_LOCK(value,timeout)函数使用字符串value给定的名字获取锁,持续timeout秒。如果成功获取锁,则返回1,如果获取锁超时,则返回0,如果发生错误,则返回NULL。使用GET_LOCK(value,timeout)函数获取的锁,当执行RELEASE_LOCK(value)或断开数据库连接(包括正常断开和非正常断开),锁都会被解除。使用示例如下:
mysql> SELECT GET_LOCK('mysql',1000);
+------------------------+
| GET_LOCK('mysql',1000) |
+------------------------+
| 1 |
+------------------------+
1 row in set (0.00 sec)
获得一个名称为mysql,持续时间为1000s的锁。
11.9.2 RELEASE_LOCK(value)函数
RELEASE_LOCK(value)函数将以value命名的锁解除。如果解除成功,则返回1,如果线程还没有创建锁,则返回0,如果以value命名的锁不存在,则返回NULL。
mysql> SELECT RELEASE_LOCK('mysql');
+-----------------------+
| RELEASE_LOCK('mysql') |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.10 sec)
注意:锁不存在包括两种情况。
·从未被GET_LOCK(value,timeout)函数获取过。
·锁已经被调用RELEASE_LOCK(value)函数释放过。
11.9.3 IS_FREE_LOCK(value)函数
IS_FREE_LOCK(value)函数判断以value命名的锁是否可以被使用。如果可以被使用,则返回1,如果不能使用,也就是说正在被使用,则返回0,如果发生错误,则返回NULL。使用示例如下:
mysql> SELECT IS_FREE_LOCK('mysql');
+-----------------------+
| IS_FREE_LOCK('mysql') |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.00 sec)
11.9.4 IS_USED_LOCK(value)函数
IS_USED_LOCK(value)函数判断以value命名的锁是否正在被使用,如果正在被使用,则返回使用该锁的数据库连接ID,否则返回NULL。使用示例如下:
mysql> SELECT IS_USED_LOCK('mysql'), IS_USED_LOCK('test');
+-----------------------+----------------------+
| IS_USED_LOCK('mysql') | IS_USED_LOCK('test') |
+-----------------------+----------------------+
| NULL | 8 |
+-----------------------+----------------------+
1 row in set (0.00 sec)
- 点赞
- 收藏
- 关注作者
评论(0)