如何将MySQL事件设置为在最后一个事件仍在执行时不触发
我通常按如下方式设置MySql事件,其中UpdateTable()是一个更改表数据的存储过程如何将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分钟(如上面的查询所示
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错误日志中