我需要触发器在表中的每个插入项上添加当前日期(仅日期而非时间)。
CREATE TRIGGER set_created_date
BEFORE INSERT ON people
FOR EACH ROW BEGIN
SET NEW.created_date = date();
END;
这是我的代码。我做错了什么?谢谢
答案 0 :(得分:3)
您可以使用以下解决方案:
USE db_name; -- or select the database with script / tool
DELIMITER |
CREATE TRIGGER set_created_date BEFORE INSERT ON people
FOR EACH ROW
BEGIN
SET NEW.created_date = CURDATE();
END;
|
DELIMITER ;
注释/解释:
如果您在列DEFAULT
上使用created_date
值,则仅当INSERT
上没有为该列提供值时,才将默认值设置为该列。因此,如果有人运行INSERT
命令,如下所示:
INSERT INTO people (name, created_date) VALUES ('John Doe', '2017-02-03');
未将默认值(当前日期)设置为该列。而是将可用值设置为列(2017-02-03
)。
TRIGGER
设置每个INSERT
的当前日期。如果有人执行上述INSERT
命令,则仍将当前日期设置为created_date
列(而不是INSERT
命令提供的值)。
答案 1 :(得分:1)
为什么要触发?为什么不设置您的create_date
字段default now()
alter table people modify column create_date datetime default now();
此处显示了其工作原理:http://sqlfiddle.com/#!9/50a441/1