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 '',sleep(10) from dual where not exists
(select order_id from orders where order_id='');
再执行下面的SQL语句:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
insert into orders(order_id,order_addr)
select '',234 from dual where not exists
(select order_id from orders where order_id='');
我们会发现,第二个SQL语句可以正常执行,但第一个SQL语句出现了死锁:
[Err] 1213 - Deadlock found when trying to get lock; try restarting transaction
总结:sleep函数让sql语句暂停执行指定的时间,这样可以模拟或者观察sql语句执行过程中的细节,方便进行调试、纠错,希望本文有帮助。
https://blog.csdn.net/weixin_44742132/article/details/89674482
MySQL中的sleep函数介绍的更多相关文章
- MySQL中常用转换函数介绍
Cast函数:CONVERT函数. 用法:CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name). ...
- mysql中的group_concat函数的用法
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ...
- mysql中的ifnull()函数判断空值
我们知道,在不同的数据库引擎中,内置函数的实现.命名都是存在差异的,如果经常切换使用这几个数据库引擎的话,很容易会将这些函数弄混淆. 比如说判断空值的函数,在Oracle中是NVL()函数.NVL2( ...
- MySQL中的group_concat函数的使用
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ...
- Mysql中使用find_in_set函数查找字符串
mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不 ...
- SQLServer 中实现类似MySQL中的group_concat函数的功能
SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ...
- python中multiprocessing.pool函数介绍_正在拉磨_新浪博客
python中multiprocessing.pool函数介绍_正在拉磨_新浪博客 python中multiprocessing.pool函数介绍 (2010-06-10 03:46:5 ...
- mysql中的substr()函数
mysql中的substr()函数和hibernate的substr()参数都一样,就是含义有所不同. 用法: substr(string string,num start,num length); ...
- Mysql中常用的函数汇总
Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回 ...
随机推荐
- Error creating bean with name 'objectMapperConfigurer' defined in class path resource
- How Many Answers Are Wrong(带权并查集)
题目 带权并查集的博客~ 题目: 多组输入数据.n,m.你不知道[1,n]内任意区间内值的和. m次询问,a b 是端点,都在n的范围以内 : v表示 [a,b]的区间内值的和.对每次询问,判断v是否 ...
- java学习笔记13-重写与重载
重写 重写是子类对父类允许访问的方法实现过程进行重新编写,返回值和参数都不能变. 重写方法不能抛出新的检查异常和比被重写方法更加宽泛的异常 访问权限不能比被重写方法低 声明为final的方法不能被重写 ...
- BCB6 调用C# DLL
最近项目涉及第三方接口调用.第三方是用C#实现的WCF服务.而我们的程序是使用的BCB6开发.因此,打算将与WCF的通讯包含在C#的类库中,给BCB6调用.BCB6 是无法直接调用C#的DLL,但可以 ...
- JavaScript各种窗口尺寸
浏览器窗口可视区域大小 网页尺寸scrollHeight 网页尺寸offsetHeight
- JAVA遇见HTML——JSP篇(JavaBeans)
1.像使用普通java类一样,创建javabean实例,利用构造方法创建实例 跟表单关联,“*”表示根据名称来进行匹配,就是根据表单所提交过来的参数的名字和Javabean当中的属性名字来进行一一匹配 ...
- Hibernate初探之单表映射——创建对象-关系映射文件
编写一个Hibernate例子 第三步:创建对象-关系映射文件 以下是具体实现步骤: 找到我们要持久化的学生类Sudents 生成对象-关系映射文档Students.hbm.xml: <?xml ...
- 使用python批量造测试数据
# -*- coding:utf-8 -*- import json import os import time class Virtual_Data: def __init__(self): sel ...
- 教程|Anaconda在Windows上安装及使用
Anaconda是一个python环境管理软件.可以建立环境,并向环境装安装自己需要的包. 其优势是可以不用自己一个一个安装包,极大地减少了因为配置环境而产生的时间成本:同时多个环境相互独立,为不同项 ...
- OPT
http://cdn.imgtec.com/sdk-documentation/PowerVR.Performance+Recommendations.pdf 宝贝 https://developer ...