【发布时间】: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();
【问题讨论】:
我有一个“created_date”DATETIME 字段,我希望在插入时填充当前日期。我应该为此触发器使用什么语法?这是我目前所拥有的,但它是不正确的。
CREATE TRIGGER set_created_date
BEFORE INSERT ON product
FOR EACH ROW BEGIN
SET NEW.created_date = now();
【问题讨论】:
DELIMITER ;;
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
SET NEW.created_date = NOW();
END;;
DELIMITER ;
【讨论】:
SET NEW.created_date = NOW(), NEW.last_visited = NOW();
最好的办法是将该列更改为时间戳。 MySQL 将自动使用行中的第一个时间戳作为“最后修改”值并为您更新它。如果您只想节省创建时间,这是可以配置的。
见文档http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
【讨论】:
从 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
【讨论】:
使用 Now() 不是一个好主意。它只保存当前时间和日期。当您更新数据时,它不会更新当前日期和时间。如果你想添加一次时间,默认值 =Now() 是最好的选择。如果你想使用时间戳。并希望在每次更新该行时更新此值。然后,触发器是最好的选择。
这两个教程将有助于实现触发器。
【讨论】: