mysql触发器 - 有什么像FOR EACH TABLE

时间:2013-01-25 08:29:57

标签: mysql triggers

MySql触发器非常有趣,但非常棘手。

我遇到了一些问题,我希望在after insert on后运行一次触发器。 我想在插入行之后运行我的触发器,是否有类似于每个表``???

如何使此触发器仅运行一次,但不会为每个创建的行运行。

CREATE
DEFINER=`root`@`localhost`
TRIGGER `mydb`.`leave_taken_trigger`
AFTER INSERT ON `mydb`.`leave`
FOR EACH ROW
BEGIN
    set @lt:= (SELECT count(*) FROM `leave` where  (staff_leave_application_staff_id_staff = new.staff_leave_application_staff_id_staff and leave_type_id_leave_type = new.leave_type_id_leave_type) and active = 1 );

        INSERT INTO `leave_taken`(leave_type_id_leave_type, staff_id_staff, taken_days, updated) 
        VALUES (new.leave_type_id_leave_type, new.staff_leave_application_staff_id_staff, IFNULL(@lt,0), CURDATE())
        ON DUPLICATE KEY UPDATE taken_days=IFNULL(@lt,0), updated = CURDATE(); 

END$$

1 个答案:

答案 0 :(得分:0)

我认为您无法通过触发器实现您的要求。 您的触发器将在创建的每一行中运行。 我建议您在INSERT成功完成后使用代码中的存储过程。