【问题标题】:Time Data Type - MySQL时间数据类型 - MySQL
【发布时间】:2013-03-27 03:41:26
【问题描述】:

我需要在创建记录时为记录分配日期和时间,(创建时间)

我尝试使用此语句,但每次收到错误消息:

'OrderDate' DATE DEFAULT (GETDATE()) NOT NULL,

当我尝试对其进行可视化编辑时,PHPMYSQL 显示字段数据类型已成功更改的消息,但事实并非如此。

底线;我需要知道正确的数据类型/函数来将字段的值设置为创建时间。

谢谢

【问题讨论】:

  • 你可以使用像 col_name TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 这样的时间戳
  • 我认为他不希望在创建记录后更改 OrderDate,因此不应使用 ON UPDATE CURRENT_TIMESTAMP
  • @RossSmithII 我同意。我只给出了一般语法。
  • 我试过这个说法,它奏效了:'UB_Adding_Time' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 这个字段的值是可变的吗?? @RossSmithII
  • UB_Adding_Time 字段的初始值将设置为当前时间,并且每当更新记录时,它也会更新为当前时间(假设它是第一个 TIMESTAMP 字段在表中)

标签: mysql sql database sqldatatypes


【解决方案1】:

要获得一个自动设置记录创建日期的字段,请使用:

OrderDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;

在 MySQL 5.6 之前,如果您需要 DATETIME 字段类型来自动初始化,那么您可以将您的 OrderDate 定义为

OrderDate DATETIME DEFAULT 0 NOT NULL;

并使用TRIGGER 指定日期:

DROP TRIGGER IF EXISTS atable_insert_before;

DELIMITER //

CREATE
TRIGGER atable_insert_before
    BEFORE INSERT ON 
        atable
    FOR EACH ROW
BEGIN
    IF IFNULL(NEW.OrderDate, 0) <= 0
    THEN
        SET NEW.OrderDate = NOW();
    END IF;
END;
//

DELIMITER ;

在 MySQL 5.6 中,DATETIME 字段可以像 TIMESTAMPs 现在一样自动初始化。见http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 2018-08-30
    • 2011-05-28
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多