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 字段中设置当前日期的主要内容,如果未能解决你的问题,请参考以下文章