最近我一直在寻找以下情况的解决方案:
我有一个MySQL表格,其结构如下:
每场战斗都有开始日期和结束日期。开始日期是插入的日期时间,通常结束日期是三天后。
我想创建一个mysql事件,在战斗结束日期停止战斗(设置活动状态为0)。我希望这个事件在battles表中的插入触发器上创建。
有一个相关问题,答案很少(这里)。
他们建议:
您应该能够使用触发器和事件调度程序来完成此操作:
创建一个在每次更新/插入时触发的表触发器
此触发器创建一个在行日期时间发生的计划事件,并更新第二个表格
我已经尝试创建这样的查询,但没有成功。
我有一个MySQL表格,其结构如下:
CREATE TABLE IF NOT EXISTS `battles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`active` tinyint(1) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`begindate` datetime NOT NULL,
`enddate` datetime NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
每场战斗都有开始日期和结束日期。开始日期是插入的日期时间,通常结束日期是三天后。
我想创建一个mysql事件,在战斗结束日期停止战斗(设置活动状态为0)。我希望这个事件在battles表中的插入触发器上创建。
有一个相关问题,答案很少(这里)。
他们建议:
您应该能够使用触发器和事件调度程序来完成此操作:
创建一个在每次更新/插入时触发的表触发器
此触发器创建一个在行日期时间发生的计划事件,并更新第二个表格
我已经尝试创建这样的查询,但没有成功。
DELIMITER |
DROP TRIGGER IF EXISTS battle_create_end|
CREATE TRIGGER battle_create_end AFTER INSERT ON battles
FOR EACH ROW BEGIN
CREATE EVENT IF NOT EXISTS CONCAT('battle_end_',NEW.id)
ON SCHEDULE AT NEW.enddate
DO
UPDATE battles SET battles.active = 0 WHERE battles.id = NEW.id;
END|
DELIMITER ;
我遇到的错误是
1576 - 当存在主体时,禁止递归EVENT DDL语句
我尝试使用不同的分隔符在for each row结构中,但都没有成功。
如果有人能帮忙,请指导。
敬礼, Ilko