23

我有一个存储过程,我想永远运行,但在循环中休眠一秒钟。当它醒来时,它会轮询一个表以查看它是否应该做一些工作。工作只需要每分钟完成一次,因此无需担心投票表同时受到来自两个作者的更新的影响。

在存储过程SLEEP()中间隔的最佳方法是什么?实际上,如果它可以休眠 200 毫秒,那就太好了,但一秒钟也可以。

4

4 回答 4

27

我遇到了同样的问题。谷歌搜索了很多之后,我发现我们可以使用

SELECT SLEEP(<seconds>);

延迟我们的程序这么多秒。在你的情况下,使用

SELECT SLEEP(0.2);

就好了。

于 2012-10-26T03:10:47.777 回答
8

您可以使用:

DO SLEEP(0.2);

参考:http ://dev.mysql.com/doc/refman/5.7/en/do.html

或者

SELECT SLEEP(0.2);

参考:http ://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_sleep

于 2016-09-01T08:33:15.783 回答
3

MySQL 有一个事件调度程序。https://dev.mysql.com/doc/refman/5.6/en/events-overview.html

样本:

CREATE EVENT performance_schema_snapshots.fill_events_statements_summary_by_digest_history1
  ON SCHEDULE -- every day at 6 am 
    EVERY 1 DAY
    STARTS TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 14 HOUR
  DO
    -- take snapshot 
    CALL performance_schema_snapshots.events_statements_summary_by_digest_snapshot_reset (); 
于 2018-12-03T22:06:53.550 回答
0

你没有指定你正在使用哪个数据库,但通常实现你想要的方法不是拥有一个无限运行的存储过程,而是拥有一些外部组件——比如调度程序,或者 MSSQL 中的 SQL Server 代理——经常执行存储过程.

于 2012-05-12T00:13:36.510 回答