【问题标题】:Having a "Creation Date" column with default value at table creation在创建表时具有具有默认值的“创建日期”列
【发布时间】:2019-07-08 19:40:31
【问题描述】:

我想要一列来存储行的创建日期。 我正在使用 php 和 mysql,但我认为这并不重要。

我已经寻找了一系列关于此的答案,但所有这些答案似乎都是为了更新现有表。好吧,肯定有一个我正在寻找的东西,因为这是一个非常基本的问题,但我还没有找到它。 我已经尝试过使用 DEFAULT、CONSTRAINT 的方法,但是一旦添加到我的代码中,它们都不允许我创建表。你可能会觉得我不精通sql,你不会错的。

这会创建表格,你能告诉我要添加什么吗?

CREATE TABLE IF NOT EXISTS artwork (
  id_artwork int(4) NOT NULL AUTO_INCREMENT,
  title varchar(50) NOT NULL,
  creationDate DateTime(3),
  CONSTRAINT PK_artwork PRIMARY KEY (id_artwork)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我尝试了以下方法但没有成功:

creationDate DateTime(3) DEFAULT GETDATE()
creationDate DateTime(3) DEFAULT (GETDATE())
creationDate DATETIME(3) DEFAULT (CURRENT_TIMESTAMP)

MySQL 版本:5.7.23 - MySQL 社区服务器 (GPL)

【问题讨论】:

  • 您可以使用DEFAULT SQL 子句,如果未指定值,则默认为当前日期/时间。现在,如果你想强制执行这个值,你需要在INSERTUPDATE 上添加一个触发器,以确保它在创建时设置为正确的值,并且不会被更新更改。
  • 显示您的DEFAULT 尝试。

标签: mysql sql


【解决方案1】:

来自MySQL documentation on initialization using DATETIME

如果 TIMESTAMP 或 DATETIME 列定义在任何地方都包含明确的小数秒精度值,则必须在整个列定义中使用相同的值。

这意味着我们必须提高您的精确度。我能够让它在SQL Fiddle上工作:

CREATE TABLE IF NOT EXISTS artwork (
  id_artwork int(4) NOT NULL AUTO_INCREMENT,
  title varchar(50) NOT NULL,
  creationDate DateTime(3) DEFAULT CURRENT_TIMESTAMP(3),
  CONSTRAINT PK_artwork PRIMARY KEY (id_artwork)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

【讨论】:

  • 是的,确实有效,非常感谢。因为我只是通过 php 创建表并在 phpmyadmin 中“手动”插入行,所以当我这样做时,它会要求我选择一个日期(它本身不会插入当前时间)所以我想我必须使用创建新条目时的相应功能。
猜你喜欢
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
相关资源
最近更新 更多