0

MySqlトリガーは非常に興味深いものですが、非常に注意が必要です。

問題があります。トリガーを1回実行したいと思いafter insert onます。行が挿入された後にトリガーを1回実行したいのですが、各テーブルに似たようなものはありますか?

このトリガーを1回だけ実行する方法。ただし、作成された行ごとには実行しないでください。

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$$
4

1 に答える 1

0

トリガーでは要件を達成できないと思います。トリガーは、作成されたすべての行で実行されます。INSERT が正常に完了した後、コードからストアド プロシージャを使用することをお勧めします。

于 2013-01-25T08:35:53.373 に答える