MySQL数据库中有一个不太常用但便于进行某些调试的函数:sleep(),今天我们就来介绍一下这个函数的用法。

首先,看看官网对于函数的定义:

SLEEP(duration)

Sleeps (pauses) for the number of seconds given by the duration argument, then returns 0. The duration may have a fractional part. If the argument is NULL or negative, SLEEP() produces a warning, or an error in strict SQL mode.

可以看到,这个函数的作用就是休眠,参数是休眠的时长,以秒为单位,也可以是小数。

看一下这个函数的执行效果:

在这里插入图片描述

可以看到,语句的执行时间为1秒。我们可以利用这样的效果,来仔细观察一些SQL语句的执行情况,比如死锁,因为不加上sleep这个函数,很多SQL语句很快就执行结束,这样就难以复现过程中的细节,关于死锁的模拟,在后面会有例子可供参考。

sleep函数可以放在select子句中,让每行记录都休眠指定的时间,如下图所示,sleep的参数是10秒,数据库表中一共有两条记录,整个语句执行的时间为20秒。

在这里插入图片描述

在上面SQL执行期间,使用命令show processlist看看有哪些线程在运行,从下图可以看出上面的SQL语句正在执行。

在这里插入图片描述

如果没有满足条件的记录,则sleep函数也不会生效,SQL语句不会休眠,如下图:

在这里插入图片描述

SQL语句的执行时间为0秒。下面,我们利用sleep函数来模拟死锁的现象。

先创建表:

CREATE TABLE `orders` (`order_id` int(11) NOT NULL,`order_addr` varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后打开两个session,可以使用mysql客户端打开两个窗口,先执行下面的SQL语句:

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;insert into orders(order_id,order_addr)select '12345',sleep(10) from dual where not exists(select order_id from orders where order_id='12345');

再执行下面的SQL语句:

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;insert into orders(order_id,order_addr)select '12345',234 from dual where not exists(select order_id from orders where order_id='12345');

我们会发现,第二个SQL语句可以正常执行,但第一个SQL语句出现了死锁:

[Err] 1213 - Deadlock found when trying to get lock; try restarting transaction

总结:sleep函数让sql语句暂停执行指定的时间,这样可以模拟或者观察sql语句执行过程中的细节,方便进行调试、纠错,希望本文有帮助。

sleep函数_MySQL中的sleep函数介绍相关推荐

  1. mysql空值判断函数_MySQL中的ifnull()函数判断空值

    我们知道,在不同的数据库引擎中,内置函数的实现.命名都是存在差异的,如果经常切换使用这几个数据库引擎的话,很容易会将这些函数弄混淆. 比如说判断空值的函数,在Oracle中是NVL()函数.NVL2( ...

  2. mysqlsql常用函数_MySQL中的常用函数

    在MySQL中,函数不仅可以出现在select语句及其子句中,而且还可以出现在update.delete语句中. 常用的函数有: 1. 字符串函数:主要用于处理字符串. 2. 数值函数:主要用于处理数 ...

  3. mysql 排序开窗函数_MySQL中实现开窗函数

    一.概述 row_number是数据库中常用的一个开窗函数,可以实现数据分区编号的功能,然而MySQL并不支持开窗函数.本文介绍了在MySQL中实现开窗函数的方法. 二.经典开窗函数 首先准备基础数据 ...

  4. mysql中常用的sql函数_Mysql中的常用函数:

    Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...

  5. mysql常用转换函数_MySQL中常用转换函数介绍

    Cast函数:CONVERT函数. 用法:CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name). ...

  6. mysql输出max函数_MySQL中的max()函数使用教程

    MySQL的max()函数是用来找出一个记录集中的最大值记录. 要了解MAX功能考虑的EMPLOYEE_TBL表具有以下记录: mysql> SELECT * FROM employee_tbl ...

  7. mysql中的split函数_mysql中的split函数

    mysql中没有字符串的分割函数,而最近在工作中,想用到这个功能,所以就在网上找了下,终于在csdn发现一个好方法.原帖的地址: 这里摘抄两个函数: DELIMITER $$ CREATE DEFIN ...

  8. mysql关于日期的函数_MySQL中关于日期函数汇总

    实际应用 SELECT NOW(),DATE_FORMAT(NOW(),'%Y-%m-%d') '%Y-%m-%d'; 年 月 日 时间模块 小时 分钟 秒 周 %X 年,其中的星期日是周的第一天,4 ...

  9. php mysql ifnull函数_MYSQL中的IFNULL函数

    手册上: IFNULL(expr1,expr2) 假如expr1不为NULL,则IFNULL()的返回值为 expr1;否则其返回值为 expr2.IFNULL()的返回值是数字或是字符串,具体情况取 ...

最新文章

  1. luvit 被忽视的lua 高性能框架(仿nodejs)
  2. PowerDesigner连接Oracle数据库生成数据模型【本地连接方式】
  3. Objective-C中的KVC与KVO(上)
  4. python3 如何让字典保持有序
  5. Linux日志系统-06:案例2-实现httpd的日志滚动分割
  6. osgi学习之---扩展点理解
  7. 融于心而表于行 之 磁盘的管理方式
  8. html完整性检测,html - 什么是完整性和crossorigin属性?
  9. mat工具MemoryAnalyzer进行分析java内存溢出hprof文件
  10. 3月第2周安全回顾 微软修补12个漏洞 ***盯上企业FTP
  11. 基音检测 matlab,基于MATLAB基音检测分析.doc
  12. 关于css中class属性多值问题(亲测,各种情况,附详细代码)
  13. 打印图形(内测第1届第1题)
  14. 微信开发者工具构建npm
  15. 插入u盘计算机未响应,插入U盘打开“我的电脑”后就未响应了,并且所有跟U盘相关的软件都? 爱问知识人...
  16. SAP B1 VS女士的Navision ERP的比较 - 知道如何选择软件
  17. vscode快建创建vue模板
  18. 读论文,第十五天:FingerPing: Recognizing Fine-grained Hand Poses using Active Acoustic On-body Sensing
  19. JAVA中list根据某个字段排序
  20. 嵌入式优秀资源网址整理

热门文章

  1. QtCreator集成开发环境编译调试VLC
  2. .net API跨域
  3. QT 通过QNetworkReply *获取对应请求的URL地址
  4. shopnc 商城源码阅读笔记--开篇概述
  5. iOS工作笔记(十二)
  6. 便利的操作plist文件
  7. Delphi 的运算符重载(2) - 可重载运算符列表
  8. 实现IHttpModule接口获取Session来实现页面访问日志功能。
  9. STM32中STD、HAL、LL库比较
  10. 《学习OpenCV3(中文版)》图书目录