【问题标题】:MySQL set current date in a DATETIME field on insertMySQL 在插入时在 DATETIME 字段中设置当前日期
【发布时间】: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();

【问题讨论】:

    标签: mysql triggers


    【解决方案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() 是最好的选择。如果你想使用时间戳。并希望在每次更新该行时更新此值。然后,触发器是最好的选择。

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

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

      【讨论】:

        猜你喜欢
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-02
        • 2016-09-29
        • 2012-04-08
        • 2017-04-01
        • 2021-10-25
        相关资源
        最近更新 更多