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. 跟着minium官网介绍学习minium-----(一)

    某天,再打开微信开发者工具的时候收到一条推送.说是微信小程序自动化框架 Python 版 -- Minium 公测. Url如下: https://developers.weixin.qq.com/c ...

  2. java - day008 - 接口,内部类

    接口 作用: 结构设计工具,用来解耦合,需要有子类,隔离具体实现 接口是一个极端的抽象类 用 interface 代替 class 用 implements 代替 extends // 接口中所有东西 ...

  3. 求输入数字的阶乘 及加和 #s=1!+2!+3!+…..+n!

    #s=1!+2!+3!+…..+n! from functools import reduce def factorial(n): result=0 for i in range(1,n+1): re ...

  4. split()函数实现

    #split函数实现: ss='** *axx* *bv** *ctt** **dff***' result=[] def split_1(ss,a,times=len(ss)): i=0 n=0 w ...

  5. python函数入参和返回值

    以下内容参考自runoob网站,以总结python函数知识点,巩固基础知识,特此鸣谢! 原文地址:http://www.runoob.com/python3/python3-function.html ...

  6. SQL的左连接与右链接

    1.准备工作 Oracle  外连接(OUTER JOIN)包括以下: 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/F ...

  7. const int* p

    若纠结于const int* p,int const* p,int* const p这三个指针,可以看视频 https://www.icourse163.org/learn/BUPT-10035640 ...

  8. pyecharts v1 版本 学习笔记 折线图,面积图

    折线图 折线图 基本demo import pyecharts.options as opts from pyecharts.charts import Line c = ( Line() .add_ ...

  9. Luogu [P3622] [APIO2007]动物园

    题目链接 比较费脑子的一道题 先说题目核心思想 : 状压dp 环的处理我们先不管. 我们设 dp[j][s] 表示 到达动物 j 且 [ j , j+5) 这五个动物状态为s时 最多能使多少小朋友开心 ...

  10. 数据结构实验之二叉树四:(先序中序)还原二叉树 (SDUT 3343)

    #include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; } ...