我目前有一个php脚本,它从一个表(活动)中删除记录并将其插入到另一个表(归档/历史记录)中。AFTER DELETE事件触发器上的MySQL'CASE'语法
这样,我正在写一个事件触发器,它会将相同的记录再次插入到活动表(它是一个重复出现的任务),然后根据同一记录中的另一个字段“优先级”更新记录的“duedate”字段。
我已经完成了PHP脚本的所有逻辑,问题与我的事件触发器中的语法有关。错误状态“位于第14行SQL语句附近的语法错误”命令“”。 (结束语)。这个语法是否会更新表中的所有记录或只是复制的记录?
触发语法在这里:
BEGIN
INSERT INTO Tasks SELECT * FROM Tasks where taskName=taskName;
UPDATE Tasks
SET DueDate =
CASE
WHEN Priority = 'Daily' THEN DATE_ADD(DueDate, INTERVAL 1 DAY)
WHEN Priority = 'Weekly' THEN DATE_ADD(DueDate, INTERVAL 7 DAY)
WHEN Priority = 'Monthly' THEN DATE_ADD(DueDate, INTERVAL 1 MONTH)
WHEN Priority = 'Quarterly' THEN DATE_ADD(DueDate, INTERVAL 3 MONTH)
WHEN Priority = 'Bi-Yearly' THEN DATE_ADD(DueDate, INTERVAL 6 MONTH)
WHEN Priority = 'Annually' THEN DATE_ADD(DueDate, INTERVAL 1 YEAR)
ELSE DueDate
END;
澄清表名称为“任务”,PK为“taskName”。 – LoMine
你能给我们完整的“CREATE”存储过程吗?我明白taskName是PK。另一个taskName在=的右边呢?另外你的分隔符是什么?我可能是错的,但据我所知,分隔符应该在(BEGIN和END之间)和(BEGIN和END之外)之间有所不同。例如,'taskName = taskName;'和'END;'应该有不同的分隔符。 – Tin
我正在使用Adminr 3.3.3,当创建事件触发器时,它会为初始触发器语法提供一些下拉输入形式,其中参数为Time,Event和Type,表示(BEFORE/AFTER),(INSER,UPDATE ,删除)和(对于每行)。生成的原始语法如下所示: DELIMITER ;; CREATE TRIGGER'Tasks_ad' AFTER DELETE ON'Tasks' FOR EACH ROW BEGIN \t // SQL语句和逻辑 END ;; DELIMITER; – LoMine