关于触发器:MySQL在插入时的DATETIME字段中设置当前日期

MySQL set current date in a DATETIME field on insert

我有一个"创建日期"日期时间字段,希望在插入时用当前日期填充该字段。我应该为这个触发器使用什么语法?这是我目前为止所拥有的,但它是错误的。

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

1
2
3
4
5
6
DELIMITER ;;
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
    SET NEW.created_date = NOW();
END;;
DELIMITER ;


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

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


由于mysql 5.6.x,您可以这样做:

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

如果您使用的是MySQL Workbench,那么您只需将CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP放入默认值字段,如下所示:

enter image description here

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


使用now()不是一个好主意。它只保存当前时间和日期。更新数据时,它不会更新当前日期和时间。如果要添加一次时间,则默认值=now()是最佳选项。如果您想使用时间戳。并希望每次更新该行时都更新该值。那么,触发器是最好的选择。

  • http://www.mysqltudiol.org/sql-triggers.aspx
  • http://www.tutorialspoint.com/plsql/plsql_triggers.htm
  • 这两个toturial将有助于实现触发器。