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) 返回 ...
随机推荐
- Python3+Appium学习笔记07-元素定位工具UI Automator Viewer
这篇主要说下如何使用UI Automator Viewer这个工具来定位元素.这个工具是sdk自带的.在sdk安装目录Tools目录下找到uiautomatorviewer.bat并启动它 如果启 ...
- Python基础之异常
一.摘要 Python使用被称为异常 的特殊对象来管理程序执行期间发生的错误.每当发生让Python不知所措的错误时,它都会创建一个异常对象.如果你编写了处理该异常的代码,程序将继续运行:如果你未对异 ...
- temp数据预处理--以24h为周期的序列
1.按照周期来截取数据 从数据库加载下来的是以5min取一次mean()的列,因此24h应取了24*60/5=288次数据 首先把这8352个数据(最后一个以倒数第二个填充)改成288*30的形式 t ...
- MongoDB常用语句大全
原文出处:https://www.cnblogs.com/--smile/p/11055204.html 直接输入mongo进入数据库 查询操作 查看当前数据库版本 db.version() //4. ...
- Linux下恢复误删除的文件
原文地址:http://www.libenfu.com/vim-分区下误删的文件,恢复文件全记录-转 当时我的工作目录是/source/needrecovered. $ pwd /source/nee ...
- Charles----伪造手机端的request和reponse参数
使用场景: 在测试中通过伪造reponse数据来模拟某些测试场景,如下截图.要求:通过修改reponse中的值,再次请求修改7为100,只是会显示为99+ 实现方式: 1.通过breakpoints来 ...
- SpringBoot + MySQL + MyBatis 整合 Redis 实现缓存操作
本地安装 Redis Redis 安装:https://www.cnblogs.com/oukele/p/11373052.html 项目结构: SpringBootRedis 工程项目结构如下: ...
- php基本语法形式
站长新闻: 备注:目前有很多人通过李书记博客找到我,请教各种关于问题,而我这段时间是比较忙的,有时候真的是有心无力,网站更新也少了,希望大家见谅!还有很多phper希望我找下关于php相关的技术文档我 ...
- pandas处理json脱坑(一)--JsonError: Expecting property name enclosed in double quotes
python执行json.loads(…)时遇到的错误json格式的文本中应该用双引号,而不是单引号,如: brief=json.loads(row["brief"].replac ...
- 4、获取Class中的构造函数
4.获取Class中的构造函数 4.1 早期创建对象 早期创建对象,先根据被new的类的名称找寻该类的字节码文件,并加载进内存,并创建该字节码文件对象,并接着创建该接文件的对应的Person对象 co ...