sleep函数_MySQL中的sleep函数介绍
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函数介绍相关推荐
- mysql空值判断函数_MySQL中的ifnull()函数判断空值
我们知道,在不同的数据库引擎中,内置函数的实现.命名都是存在差异的,如果经常切换使用这几个数据库引擎的话,很容易会将这些函数弄混淆. 比如说判断空值的函数,在Oracle中是NVL()函数.NVL2( ...
- mysqlsql常用函数_MySQL中的常用函数
在MySQL中,函数不仅可以出现在select语句及其子句中,而且还可以出现在update.delete语句中. 常用的函数有: 1. 字符串函数:主要用于处理字符串. 2. 数值函数:主要用于处理数 ...
- mysql 排序开窗函数_MySQL中实现开窗函数
一.概述 row_number是数据库中常用的一个开窗函数,可以实现数据分区编号的功能,然而MySQL并不支持开窗函数.本文介绍了在MySQL中实现开窗函数的方法. 二.经典开窗函数 首先准备基础数据 ...
- mysql中常用的sql函数_Mysql中的常用函数:
Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...
- mysql常用转换函数_MySQL中常用转换函数介绍
Cast函数:CONVERT函数. 用法:CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name). ...
- mysql输出max函数_MySQL中的max()函数使用教程
MySQL的max()函数是用来找出一个记录集中的最大值记录. 要了解MAX功能考虑的EMPLOYEE_TBL表具有以下记录: mysql> SELECT * FROM employee_tbl ...
- mysql中的split函数_mysql中的split函数
mysql中没有字符串的分割函数,而最近在工作中,想用到这个功能,所以就在网上找了下,终于在csdn发现一个好方法.原帖的地址: 这里摘抄两个函数: DELIMITER $$ CREATE DEFIN ...
- mysql关于日期的函数_MySQL中关于日期函数汇总
实际应用 SELECT NOW(),DATE_FORMAT(NOW(),'%Y-%m-%d') '%Y-%m-%d'; 年 月 日 时间模块 小时 分钟 秒 周 %X 年,其中的星期日是周的第一天,4 ...
- php mysql ifnull函数_MYSQL中的IFNULL函数
手册上: IFNULL(expr1,expr2) 假如expr1不为NULL,则IFNULL()的返回值为 expr1;否则其返回值为 expr2.IFNULL()的返回值是数字或是字符串,具体情况取 ...
最新文章
- luvit 被忽视的lua 高性能框架(仿nodejs)
- PowerDesigner连接Oracle数据库生成数据模型【本地连接方式】
- Objective-C中的KVC与KVO(上)
- python3 如何让字典保持有序
- Linux日志系统-06:案例2-实现httpd的日志滚动分割
- osgi学习之---扩展点理解
- 融于心而表于行 之 磁盘的管理方式
- html完整性检测,html - 什么是完整性和crossorigin属性?
- mat工具MemoryAnalyzer进行分析java内存溢出hprof文件
- 3月第2周安全回顾 微软修补12个漏洞 ***盯上企业FTP
- 基音检测 matlab,基于MATLAB基音检测分析.doc
- 关于css中class属性多值问题(亲测,各种情况,附详细代码)
- 打印图形(内测第1届第1题)
- 微信开发者工具构建npm
- 插入u盘计算机未响应,插入U盘打开“我的电脑”后就未响应了,并且所有跟U盘相关的软件都? 爱问知识人...
- SAP B1 VS女士的Navision ERP的比较 - 知道如何选择软件
- vscode快建创建vue模板
- 读论文,第十五天:FingerPing: Recognizing Fine-grained Hand Poses using Active Acoustic On-body Sensing
- JAVA中list根据某个字段排序
- 嵌入式优秀资源网址整理