MySQL 在插入时在 DATETIME 字段中设置当前日期

Posted

技术标签:

【中文标题】MySQL 在插入时在 DATETIME 字段中设置当前日期【英文标题】:MySQL set current date in a DATETIME field on insert 【发布时间】:2010-11-11 10:55:41 【问题描述】:

我有一个“created_date”DATETIME 字段,我希望在插入时填充当前日期。我应该为此触发器使用什么语法?这是我目前所拥有的,但它是不正确的。

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

【问题讨论】:

【参考方案1】:
DELIMITER ;;
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
    SET NEW.created_date = NOW();
END;;
DELIMITER ;

【讨论】:

我可以用这个添加另一个任务吗>>“ SET NEW.last_visited=NOW();” ?我做了,但发生了错误。谢谢。 @pevik @MuhammadAshikuzzaman 您可以使用逗号分隔它们。所以SET NEW.created_date = NOW(), NEW.last_visited = NOW();【参考方案2】:

最好的办法是将该列更改为时间戳mysql 将自动使用行中的第一个时间戳作为“最后修改”值并为您更新它。如果您只想节省创建时间,这是可以配置的。

见文档http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

【讨论】:

最新版本的mysql不支持多时间戳,所以我们可以有一个时间戳和多个触发器。【参考方案3】:

从 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

【讨论】:

【参考方案4】:

使用 Now() 不是一个好主意。它只保存当前时间和日期。当您更新数据时,它不会更新当前日期和时间。如果你想添加一次时间,默认值 =Now() 是最好的选择。如果你想使用时间戳。并希望在每次更新该行时更新此值。然后,触发器是最好的选择。

    http://www.mysqltutorial.org/sql-triggers.aspx http://www.tutorialspoint.com/plsql/plsql_triggers.htm

这两个教程将有助于实现触发器。

【讨论】:

以上是关于MySQL 在插入时在 DATETIME 字段中设置当前日期的主要内容,如果未能解决你的问题,请参考以下文章

怎么在mysql的字段中设置默认值

Mysql5.1中,datetime类型的字段为啥插入不了NULL值

更改当前字段时在访问中设置另一个字段

mysql中时间dateTime怎么插入?

mysql中时间dateTime怎么插入?

求助!!如何在java代码中,将日期插入mysql数据库(对应字段类型是datetime),用JDBC连接数据库。