zoukankan      html  css  js  c++  java
  • 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语句执行过程中的细节,方便进行调试、纠错,希望本文有帮助。

    https://blog.csdn.net/weixin_44742132/article/details/89674482

  • 相关阅读:
    mysql报错:java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
    MD5登陆密码的生成
    15. 3Sum、16. 3Sum Closest和18. 4Sum
    11. Container With Most Water
    8. String to Integer (atoi)
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    几种非线性激活函数介绍
    AI初探1
    AI初探
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/4060746.html
Copyright © 2011-2022 走看看