示例

# CodeIgniter/system/libraries/Session/drivers/CI_Session_database_driver.php

$this->_db->query("SELECT GET_LOCK('".$arg."', 300) AS ci_session_lock")->row()->ci_session_lock);

$this->_db->query("SELECT RELEASE_LOCK('".$this->_lock."') AS ci_session_lock")->row()->ci_session_lock);

?>

简介

GET_LOCK(str,timeout)

释义:

Tries to obtain a lock with a name given by the string str, using a timeout of timeout seconds. A negative timeout value means infinite timeout. The lock is exclusive. While held by one session, other sessions cannot obtain a lock of the same name.

试图分配一个名为name,超时时间为timeout秒的锁。timeout为负数时表示永不超时。该锁是独立的,即当有一个连接在使用名为str的锁时,其他的连接无法获得该锁。

返回值:

Returns 1 if the lock was obtained successfully, 0 if the attempt timed out (for example, because another client has previously locked the name), or NULL if an error occurred (such as running out of memory or the thread was killed with mysqladmin kill).

1:获得成功; 0:获取超时(比如有其他客户端已经锁住了该锁); NULL:发生错误(比如内存溢出或者线程被mysqladmin杀掉了)。

释放锁:

A lock obtained with GET_LOCK() is released explicitly by executing RELEASE_LOCK() or implicitly when your session terminates (either normally or abnormally). Lock release may also occur with another call to GET_LOCK():

执行RELEASE_LOCK()或者你的连接中断(正常或非正常情况)都可以直接释放通过GET_LOCK()获得的锁。其他连接使用GET_LOCK()时可能也会释放。

注意:With the capability of acquiring multiple named locks in MySQL 5.7.5, it is possible for a single statement to acquire a large number of locks. For example:

INSERT INTO ... SELECT GET_LOCK(t1.col_name) FROM t1;

These types of statements may have certain adverse effects. For example, if the statement fails part way through and rolls back, locks acquired up to the point of failure will still exist. If the intent is for there to be a correspondence between rows inserted and locks acquired, that intent will not be satisfied. Also, if it is important that locks are granted in a certain order, be aware that result set order may differ depending on which execution plan the optimizer chooses. For these reasons, it may be best to limit applications to a single lock-acquisition call per statement.

伴随着MySQL 5.7.5中的获取多重命令锁的能力,可能会使单个语句获取很多个锁,比如:

INSERT INTO ... SELECT GETLOCK(t1.colname) FROM t1;

这列类型的语句可能潜藏不利的因素。比如,如果这个语句执行失败发生回滚,虽然语句失败但是锁依然存在。如果你本来的意图是行插入成功和锁获取成功,这个时候就不满足不了。比如如果使用锁来控制一定的命令顺序,请注意根据优化器选择的执行计划可能会使结果集有所不同。由于这些原因,最好将应用限制为获取每个语句的单个锁.

mysql get lock_MYSQL-GET_LOCK锁相关推荐

  1. mysql中的get_lock锁机制解析

    GET_LOCK(key,timeout)  需要两个连接会话 RELEASE_LOCK(key)  锁是否释放,释放了返回1 IS_FREE_LOCK(key)  返回当前连接ID,表示名称为'xx ...

  2. MySQL优化篇:锁机制

    文章目录 1.概述 1.1 定义 1.2 分类 2.表锁(偏向于读操作) 2.1 特点 2.2 案例分析 2.3 案例结论 2.4 表锁分析 3.行锁(偏向于写操作) 3.1 特点 3.2 案例分析 ...

  3. Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁( ...

  4. 完美解答35K月薪的MySQL面试题(四)MySQL是如何加行锁的?

    四.MySQL是如何加行锁的? 1.RR隔离级别下的加锁机制 2.RC隔离级别下的加锁机制 间隙锁时为了解决幻读问题,在RC允许出现幻读现象所以RC隔离级别下行锁都加的是记录锁. 只有在外键约束检查( ...

  5. 9.MYSQL:MyISAM表级锁(共享读锁 独占写锁)串行+并发

    数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性.下面举例说明并发操作带来的数据不一致性问题: 现有两处火车票售票点, ...

  6. 五分钟了解Mysql的行级锁——《深究Mysql锁》

    延伸阅读: 三分钟了解Mysql的表级锁 一分钟深入Mysql的意向锁 mysql锁相关讲解及其应用--<深究mysql锁>了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没 ...

  7. 三分钟了解Mysql的表级锁——《深究Mysql锁》

    延伸阅读: 五分钟了解Mysql的行级锁 一分钟深入Mysql的意向锁 mysql锁相关讲解及其应用--<深究mysql锁>了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没 ...

  8. 秒杀 mysql 事务_秒杀怎么样才可以防止超卖?基于mysql的事务和锁实现

    Reference:  http://blog.ruaby.com/?p=256 并发事务处理带来的问题? 相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从 ...

  9. mysql索引列是锁表还是锁行_[转]关于MYSQL Innodb 锁行还是锁表

    关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况.为什么呢?先看一下这篇文章. 做项目时由于业务逻辑的需要,必须 ...

  10. 把MySQL中的各种锁及其原理都画出来

    疫情期间在家工作时,同事使用了 insert into on duplicate key update 语句进行插入去重,但是在测试过程中发生了死锁现象: ERROR 1213 (40001): De ...

最新文章

  1. zoj2760(最大流)
  2. 解决linux ssh登陆缓慢问题
  3. CF682C Alyona and the Tree
  4. Spring点滴二:Spring Bean
  5. sigmoid函数的数值稳定性
  6. [Unity3d]Unity Mathf 数学运算(C#)
  7. ajax提交时“加载中”提示的处理方法
  8. 在线分流框架下的AB Test
  9. I firmly believe
  10. [渝粤教育] 湘潭大学 计算机组成与体系结构 参考 资料
  11. 海马苹果助手ipad版_资源分享苹果越狱工具
  12. 《C专家编程》笔记——第一章
  13. 计算机可行性分析报告,计算机可行性分析报告范文.docx
  14. LAD原理(1)知识储备之函数和分布
  15. web期末网站设计大作业:基于HTML+CSS+JavaScript制作新能源汽车企业网站
  16. 永信至诚助“海南省首届网络安全大赛”决赛圆满收官
  17. h5游戏接入googleplay时遇到的问题总结
  18. When Seawater Turns Sweet
  19. 一字一句体验语言的魅力-2:80386-datasheet翻译学习-第一章完
  20. 羞辱iPhone! 安卓配Mac才最爽?老司机道出8个爽点...(iPhone骂骂咧咧退出群聊)...

热门文章

  1. Ardino基础教程 1_让Arduino说出HelloWorld
  2. Ubuntu12.10 root用户登录设置
  3. linux嵌入式开发遇到坑不用慌 让你快速提升进度
  4. spring cloud java b2b2c o2o分布式 微服务电子商务平台
  5. Docker镜像的基本操作
  6. java-信息安全(十)-数字签名算法DSA
  7. 【实验吧】编程循环求底运算
  8. Ubuntu使用ssh公钥实现免密码登录
  9. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法...
  10. octet和byte