我的问题如下:
在表A(任务)上,我有触发器,它更新上次更改的日期时间 - 列DateChanged(用于捕获用户编辑的日期时间)
在表B(TaskProgress)上我有触发器,它会更新在任务上花费的总时间(对于给定的Task_ID和表A中的更新列TotalTime,所有时间总和)
我希望仅在用户进行更新时更新表A中的DateChanged(除非表B上的触发更新TotalTime,否则每次更新)
所以我想知道,在更新另一个触发器中的值时,是否有办法告诉数据库不要触发TRIGGER。
/* set date of last change and date od closing of task */
DELIMITER $$
CREATE TRIGGER before_tasks_update
BEFORE UPDATE ON tasks
FOR EACH ROW BEGIN
SET new.DateChanged = NOW();
IF new.Status_ID = 3 THEN
SET new.DateClosed = NOW();
END IF;
END$$
DELIMITER ;
/* set total time spent on task */
DELIMITER $$
CREATE TRIGGER after_taskprogress_insert
AFTER INSERT ON taskprogress
FOR EACH ROW BEGIN
DECLARE sumtime TIME;
SET @sumtime := (SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( `timeSpent` ) ) )
FROM taskprogress WHERE Task_ID = new.Task_ID);
UPDATE `tasks` SET TimeReal = @sumtime WHERE ID = new.Task_ID;
END $$
DELIMITER ;
我使用MySQL 5.5.40
谢谢,zbynek
答案 0 :(得分:0)
添加一项检查以验证更新是否意味着新的TimeReal值,因为只有第二个触发器会更新该列。
DELIMITER $$
CREATE TRIGGER before_tasks_update
BEFORE UPDATE ON tasks
FOR EACH ROW BEGIN
IF new.TimeReal=old.TimeReal THEN SET new.DateChanged = NOW();
END IF;
IF new.TimeReal=old.TimeReal AND new.Status_ID = 3 THEN
SET new.DateClosed = NOW();
END IF;
END$$
DELIMITER ;