存储过程中是否有SLEEP()的方法?

25

我有一个 存储过程,我想让它一直运行,但循环中要睡眠一秒钟。当他醒来时,它会轮询一张表,看它是否需要做一些工作。 工作只需要每分钟完成一次,所以不用担心轮询表被两个写入者同时更新。

在一个 存储过程 中,最好的方法是使用 SLEEP() 来等待一段时间。如果能够睡眠200毫秒就更好了,但1秒也可以。


数据库中没有调度设施吗?即使MySQL也有一个。 - user207421
我不知道...有吗?我不确定在数据库内部实现sleep()功能会有多容易。想一想,实际上这将非常困难。 - Don Wool
http://dev.mysql.com/doc/refman/5.1/en/events.html - goat
@chris,很不错!你能够详细说明一下以便原帖的提问者可以使用吗? - Barry Brown
@BarryBrown,我还没有使用过那个功能,我只是知道它的存在。 - goat
4个回答

29

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

SELECT SLEEP(<seconds>);

为了延迟我们的程序这么多秒钟。在您的情况下,使用

SELECT SLEEP(0.2);

会很好。


10
此外,如果您不需要查询结果(因为选择睡眠()只会带来0),您可以使用“DO SLEEP(<秒>);”。 - Diego

10

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 (); 

0

你没有指明使用哪种数据库,但通常实现你想要的方式不是让一个无限运行的sproc而是有一些外部组件,比如调度程序或MSSQL中的SQL Server Agent,定期执行该sproc。


数据库是MySQL。如果无法在数据库内部完成此操作,是的 - 我将定期运行外部进程来执行此操作。 - Don Wool

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