MySQL在插入时将当前日期设置为DATETIME字段的值

28

我有一个'DATETIME'字段,名为"created_date", 我希望在插入时自动填充当前日期。我应该使用什么语法来创建触发器?这是我目前的代码,但它是错误的。

CREATE TRIGGER set_created_date
BEFORE INSERT ON product
FOR EACH ROW BEGIN
SET NEW.created_date = now();
4个回答

42
DELIMITER ;;
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
    SET NEW.created_date = NOW();
END;;
DELIMITER ;

1
我能用这个语句添加另一个任务吗?“SET NEW.last_visited= NOW();”,但我尝试过,出现了错误。谢谢。@pevik - Muhammad Ashikuzzaman
@MuhammadAshikuzzaman 你可以用逗号将它们分开。所以 SET NEW.created_date = NOW(), NEW.last_visited = NOW(); - Zei

20

2
最新版本的MySQL不支持多时间戳,因此我们可以使用一个时间戳和多个触发器。 - Ahmed Syed

19

自从MySQL 5.6.X版本以后,你可以这样做:

ALTER TABLE `schema`.`users` 
CHANGE COLUMN `created` `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;

这样,当插入或更新新行时,您的列将使用当前时间戳进行更新。

如果您正在使用MySQL Workbench,则可以在默认值字段中放置CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

输入图片描述

http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html


这个可以用,谢谢。但它并没有真正回答问题,因为在这里包括 ON UPDATE 子句意味着每次更新任何字段时都会更新它,这显然不是你想要的“创建”字段,而是“最后修改”字段。但除此之外... - mike rodent
这完全取决于系统的整合方式。如果表格经常被清空,那么这是有意义的。还有,谈论重启一个旧系统! - Coreus

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接