如何正确使用MySQL中的SLEEP()函数?何时使用?

109

关于我今天另一个问题的相关信息,我想知道如何正确使用MySQL的SLEEP(duration)

从我在MySQL开发论坛上的阅读和MySQL文档中非常模糊的描述中收集的信息来看,我不能这样使用它:

SELECT ...
SLEEP(1); /* wait for a second before another SELECT */
SELECT ...
那么它到底有什么用处呢?

9
根据阅读mysql文档的经验,我本来会先尝试你的方法,但是每次阅读mysql文档后似乎都无法获得有用的信息,感谢下面的Konerak给出了非常简单的答案... - Landon
@Landon,Iroh的答案更好。 - Pacerier
2个回答

129
如果您不想使用SELECT SLEEP(1);,您也可以使用DO SLEEP(1);。它在处理过程中的某些情况下非常有用,例如您不希望看到任何输出。
例如:
SELECT ...
DO SLEEP(5);
SELECT ...

8
这应该是被接受的答案。sleep 的输出始终为0,为什么有人要选择 sleep 的输出来…… - Pacerier
2
@Pacerier:这个答案出现晚了5年,但是它使用的DO确实比SELECT更优雅。关键在于展示SLEEP本身不是一个命令,而是一个函数,这两个答案都有展示,但是你可以随意将此答案标记为已接受。 - Konerak
2
@Pacerier 选择使用 sleep 的一个原因是将其输出放入查询中,以测试并发查询中的锁定和事务隔离级别,例如。 - Barry Kelly
另外,如果您不想看到输出,可以添加一个连接或虚假的嵌套查询,例如:select 1 from (select sleep(1)) a; - Martin
1
@Pacerier 错了。它可以输出1。https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_sleep - Cleroth
如上所述,如果SELECT sleep(n)被中断,它将返回1。当测试超时时,此输出特别有用。例如,使用SET SESSION max_execution_time=<milliseconds> - Anubis

116
SELECT ...
SELECT SLEEP(5);
SELECT ...

但是你要用这个做什么?你是想绕过/重新实现互斥锁或事务吗?


62
我使用这个命令来确认慢查询日志是否按预期工作。 - jeffatrackaid
10
还可用于在应用程序层测试异步查询。 - Programster
6
没有理由重新指定“被接受的”答案。这个答案也是正确的,在我加入讨论前已经有五年了。我只是添加了另一个答案,因为我认为它对所提出的问题有价值。 - Uncle Iroh
1
我使用此命令,以便在脚本解压缩完成之后才开始导入转储。它昨晚在我睡觉时启动了一段时间。 - MatrixManAtYrService

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接