DELIMITER //
CREATE TRIGGER `Salary` AFTER UPDATE ON `employee`
FOR EACH ROW BEGIN
IF OLD.time_out <> NEW.time_out THEN
UPDATE employee SET time_work=TIMEDIFF(time_out,time_in);
END IF;
END;
DELIMITER ;
我使用这个查询
更新DataBase
。employee
SET time_out
='2014-10-22 16:41:09'在哪里IDREC
='4945'
有错误代码:1442 无法在存储的函数/触发器中更新表'employee',因为它已被调用此存储函数/触发器的语句使用。
答案 0 :(得分:0)
您无法更新调用触发器的表(employee):
在存储的函数或触发器中,不允许修改a 已经被使用(用于读或写)的表 调用函数或触发器的语句。
这样做会生成错误1442 :
Error Code: 1442
Can't update table 'employee' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
解决方案:代替AFTER UPDATE ON
,使其成为BEFORE UPDATE ON
触发器,在插入之前设置字段的新值 - 如果time_work
是在新条目中的字段,您需要在插入之前更新 - 可能的SQL(未经测试):
DELIMITER //
CREATE TRIGGER `Salary` BEFORE UPDATE ON `employee`
FOR EACH ROW BEGIN
IF OLD.time_out <> NEW.time_out THEN
SET NEW.time_work=TIMEDIFF(time_out,time_in);
END IF;
END;
DELIMITER ;