插入MYSQL时自动初始化GETDATE()

J-D*_*zle 0 mysql sql sqldatatypes

类似的问题 ~ W3schools也许有用的链接

〜问题:我正在将行插入到mysql数据库中,我希望每行都有一个列,其中显示当前日期(插入行的日期).

〜尝试解决方案:

CREATE TABLE $this->DB.$table
              (
              id int,
              Report_Date date DEFAULT CURRENT_DATE ON UPDATE CURRENT_DATE)//this fails.
Run Code Online (Sandbox Code Playgroud)

有人还会解释ON UPDATE意味着什么吗?我很紧张,当我有多天的数据时,它会更新Report_Date的所有值并弄乱我的数据.我认为,解决方案位于GETDATE的某个地方.此外,我不想要时间,只有约会.非常感激.

egg*_*yal 6

  1. CREATE TABLE语法(增加的重点)中所述:

    DEFAULT子句指定列的默认值.除了一个例外,默认值必须是常量; 它不能是一个功能或表达.这意味着,例如,您不能将日期列的默认值设置为函数的值,例如NOW()CURRENT_DATE.例外情况是您可以指定或作为(从MySQL 5.6.5开始)列CURRENT_TIMESTAMP的默认值.请参见第11.3.5节"自动初始化和更新".TIMESTAMPDATETIMETIMESTAMPDATETIME

    因此,您的选择是:

    • 使用一TIMESTAMP列(因为MySQL v5.6.5,你也可以使用一DATETIME列)并忽略时间部分;

    • INSERT命令中显式指定当前日期:

      INSERT INTO myTable (id, Report_Date) VALUES (123, CURRENT_DATE)
      
      Run Code Online (Sandbox Code Playgroud)
    • 定义一个BEFORE INSERT 触发器:

      CREATE TRIGGER myTrigger BEFORE INSERT ON myTable FOR EACH ROW
        SET NEW.Report_Date = IFNULL(NEW.Report_Date, CURRENT_DATE)
      
      Run Code Online (Sandbox Code Playgroud)
  2. 有人还会解释ON UPDATE意味着什么吗?

    由于根据记录自动初始化和更新TIMESTAMPDATETIME:

    • 自动初始化列设置为插入行的当前时间戳,该列不指定列的值.

    • 当行中任何其他列的值从其当前值更改时,自动更新列将自动更新为当前时间戳.如果所有其他列都设置为其当前值,则自动更新列保持不变.要防止在其他列更改时更新自动更新列,请将其明确设置为其当前值.要更新自动更新的列,即使其他列未更改,也要将其显式设置为应具有的值(例如,将其设置为CURRENT_TIMESTAMP).