触发MYSQL错误1442

时间:2014-10-22 07:11:04

标签: mysql triggers

    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 ;

我使用这个查询

更新DataBaseemployee SET time_out ='2014-10-22 16:41:09'在哪里IDREC ='4945'

有错误代码:1442 无法在存储的函数/触发器中更新表'employee',因为它已被调用此存储函数/触发器的语句使用。

1 个答案:

答案 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 ;