MySQL触发器/存储过程执行延迟

10

有没有一种合适的方法来延迟执行MySQL触发器?

WHILE @condition = 0
  sleep for awhile

insert into some_table values(NEW.value1, NEW.value2);
2个回答

16

自从MySQL 5.0.12版本起,你可以这样做:

SELECT SLEEP(<seconds>);

seconds参数可以包含小数,例如0.5秒。


5
如果您不想要结果集,可以使用DO SLEEP(n)来替代。 - Ross Smith II

6
DO SLEEP(<seconds>);

更好的做法是在不需要结果集的情况下,避免仅在触发器内运行 SELECT 语句。 如果您真的想这样做,需要像这样操作:

SET @nothing = (SELECT SLEEP(<seconds>));

但我建议使用DO。不要忘记,默认情况下,触发器只是一个单语句。如果您的触发器中有多个语句,则需要使用BEGIN/END

BEGIN
    DO SLEEP(<seconds>);
    UPDATE ...;
END

“你不能在触发器中仅运行选择语句”请详细说明。这是我第一次听说这个。如果您需要其他表中的数据来使触发器工作怎么办? - Dragas

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