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

时间:2009-07-16 16:57:23

标签: mysql triggers

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

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

4 个答案:

答案 0 :(得分:33)

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

答案 1 :(得分:18)

您最好的选择是将该列更改为时间戳。 MySQL将自动使用连续的第一个时间戳作为“最后修改”值并为您更新。如果您只想节省创建时间,这是可配置的。

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

答案 2 :(得分:15)

从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放在DEFAULT值字段中,如下所示:

enter image description here

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

答案 3 :(得分:3)

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

  1. http://www.mysqltutorial.org/sql-triggers.aspx
  2. http://www.tutorialspoint.com/plsql/plsql_triggers.htm
  3. 这两个有助于实现触发器。