Mysql 如何在SQL中添加值时自动更新表

Mysql 如何在SQL中添加值时自动更新表,mysql,Mysql,我有一张桌子: 休假日: id name work_days hire ------------------------------------- 1 John 369 20151226 2 Mike 767 20141123 3 Josh 1166 20131020 有一个获得聘用的公式: UPDATE vacation_days SET work_days = DA

我有一张桌子:

休假日

id    name     work_days      hire
-------------------------------------
 1    John        369       20151226
 2    Mike        767       20141123
 3    Josh       1166       20131020 
有一个获得聘用的公式:

UPDATE vacation_days SET work_days = DATEDIFF(CURDATE(),DATE(hire))
但是,如果添加新行,则会得到空值:

id    name     work_days      hire
-------------------------------------
 1    John        369       20151226
 2    Mike        767       20141123
 3    Josh       1166       20131020 
 4    Richard    NULL       20120623
我试过使用这样的触发器:

CREATE TRIGGER onInsert BEFORE INSERT ON vacation_days
FOR EACH ROW
BEGIN
SET NEW.work_days = DATEDIFF(CURDATE(),DATE(hire))
END;
但是,我得到一个错误:

 You have an error in your SQL syntax; check the manual that corresponds to 
 your MySQL server version for the right syntax to use near 
 ''vacation_days' FOR EACH ROW SET work_days = DATEDIFF(CURDATE(), DATE
 (NEW.hire))' at line 1

不要更新!只需使用一个视图:

create view v_vacation_days 
    select vd.*, DATEDIFF(CURDATE(), DATE(vd.hire)) as workdays
    from vacation_days vd;
然后,无论何时查询视图,该值都将是最新的


注意:您需要从表定义中删除
workdays

这里您之前使用的是Insert,但是在Insert之前租用数据不可用,因此您无法获取计算的租用日期。您要为使用指示
新的
旧的
租用数据

使用以下“在触发器之前插入”进行使用

DELIMITER //

CREATE TRIGGER vacation_days_before_insert
BEFORE INSERT
   ON vacation_days FOR EACH ROW
BEGIN
   -- Insert record into table
   INSERT INTO vacation_days 
   ( id,
     name,
     work_days,
     hire)
   VALUES
   ( NEW.id,
     NEW.name,
     DATEDIFF(CURDATE(),DATE(NEW.hire)),
     NEW.hire );

END; //

DELIMITER ;