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 ;