如何将MySQL事件设置为在最后一个事件仍在执行时不触发

如何将MySQL事件设置为在最后一个事件仍在执行时不触发,mysql,Mysql,我通常按如下方式设置MySql事件,其中UpdateTable()是一个更改表数据的存储过程 CREATE EVENT UpdateTable_Every1Mins -- Create and Event ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE DO CALL UpdateTable(); 有时,UpdateTable过程非常耗时,可能长达3分钟。由于我已将间隔设置为1分钟(如上面的查询所示

我通常按如下方式设置MySql事件,其中UpdateTable()是一个更改表数据的存储过程

CREATE EVENT UpdateTable_Every1Mins -- Create and Event
ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO CALL UpdateTable();
有时,UpdateTable过程非常耗时,可能长达3分钟。由于我已将间隔设置为1分钟(如上面的查询所示),如何确保在当前UpdateTable调用仍在运行时不会触发新的UpdateTable调用

谢谢

你不能直接

间接地,当然

在程序内部,在进行任何其他工作之前:

IF GET_LOCK('my_lock_name',0) IS NOT TRUE THEN
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'failed to obtain lock; not continuing';
END IF;
在程序结束之前:

DO RELEASE_LOCK('my_lock_name');
这是一个命名锁。它不锁定行或表,只锁定全局内存结构中的名称
'my\u lock\u name'
(由您组成的名称),以便其他线程无法锁定相同的名称。
0
表示不等待锁,而是在其他人持有锁时立即返回false(0),或者在发生错误时返回null-
不为TRUE
匹配null或0。请参阅手册中的。以上代码适用于MySQL Server 5.5或更高版本。早期版本支持锁定,但不支持通过
信号
停止执行

从技术上讲,释放锁对于事件不是必需的,因为它是在客户端线程终止时释放的,并且每个事件调用都在其自己的线程中,该线程在事件调用结束时终止。。。但这是最佳实践

SIGNAL
引发异常,该异常会停止执行过程和此事件调用。消息文本被记录到MySQL错误日志中

你不能直接

间接地,当然

在程序内部,在进行任何其他工作之前:

IF GET_LOCK('my_lock_name',0) IS NOT TRUE THEN
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'failed to obtain lock; not continuing';
END IF;
在程序结束之前:

DO RELEASE_LOCK('my_lock_name');
这是一个命名锁。它不锁定行或表,只锁定全局内存结构中的名称
'my\u lock\u name'
(由您组成的名称),以便其他线程无法锁定相同的名称。
0
表示不等待锁,而是在其他人持有锁时立即返回false(0),或者在发生错误时返回null-
不为TRUE
匹配null或0。请参阅手册中的。以上代码适用于MySQL Server 5.5或更高版本。早期版本支持锁定,但不支持通过
信号
停止执行

从技术上讲,释放锁对于事件不是必需的,因为它是在客户端线程终止时释放的,并且每个事件调用都在其自己的线程中,该线程在事件调用结束时终止。。。但这是最佳实践

SIGNAL
引发异常,该异常会停止执行过程和此事件调用。消息文本被记录到MySQL错误日志中