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函数介绍的更多相关文章

  1. MySQL中常用转换函数介绍

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

  2. mysql中的group_concat函数的用法

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ...

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

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

  4. MySQL中的group_concat函数的使用

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ...

  5. Mysql中使用find_in_set函数查找字符串

    mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不 ...

  6. SQLServer 中实现类似MySQL中的group_concat函数的功能

    SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ...

  7. python中multiprocessing.pool函数介绍_正在拉磨_新浪博客

    python中multiprocessing.pool函数介绍_正在拉磨_新浪博客     python中multiprocessing.pool函数介绍    (2010-06-10 03:46:5 ...

  8. mysql中的substr()函数

    mysql中的substr()函数和hibernate的substr()参数都一样,就是含义有所不同. 用法: substr(string string,num start,num length); ...

  9. Mysql中常用的函数汇总

    Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回 ...

随机推荐

  1. Mysql高可用集群-解决MMM单点故障

    目录 一.理论概述 组件介绍 三.部署 四.测试 五.总结 preface: MMM架构相比于MHA来说各方面都逊色不少,写这篇案例也算是整理下思路吧. 一.理论概述 MMM(Master-Maste ...

  2. python的set集合去重功能

    # -*- coding:utf-8 -*- setData=set([]) #第一种方式,通过add()添加元素 setData.add('china\n') setData.add('turky\ ...

  3. Python 数据类型和控制结构

    Python是一门脚本语言,我也久闻大名,但正真系统的接触学习是在去年(2013)年底到今年(2014)年初的时候.不得不说的是Python的官方文档相当齐全,如果你是在Windows上学习Pytho ...

  4. Apache Maven setting.xml

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  5. PAT Basic 1053 住房空置率 (20 分)

    在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为“可能空置”: 若观察期超过 ...

  6. Ubuntu系统---安装“搜狗拼音法”导致桌面打不开

    Ubuntu系统---安装“搜狗拼音法”导致桌面打不开 ubuntu系统中文版,安装完后,自带中文输入法.中文用着好好的,用一段时间后,就会莫名的出现,切换不过来,中文输入不好用了.只是简单想装一个搜 ...

  7. Iterator 和 ListIterator 有什么区别?(未完成)

    Iterator 和 ListIterator 有什么区别?(未完成)

  8. redis运维相关

    一.redis都有哪些数据类型?分别在哪些场景下使用比较合适?二.redis双写不一致三.雪崩和穿透四.redis的过期策略,LRU五.redis是如何实现高性能高并发六.如何保证Redis的高并发和 ...

  9. 数组的新方法 forEach some filter findIndex

    forEach  some  filter  findIndex这些都属于数组的新方法,都会对数组中的每一项,进行遍历,执行相关的操作: 只不过在循环的时候有些不一样 参考资料:https://wan ...

  10. JVM之Java运行时数据区(线程隔离区)

    来源 JVM会在会在执行Java程序过程中把所管理的内存划分为若干区域,主要包括程序计数器(Program Counter Register),虚拟机栈(VM Stack),本地方法栈(Native ...