【问题标题】:Behavior difference between TIMESTAMP and DATETIMESTAMP 和 DATE 之间的行为差​​异
【发布时间】:2014-05-20 13:41:08
【问题描述】:

我有一个表,它有两个 TIMESTAMP 列(Creation_Date 和 Edit_date),它们在 INSERT(两列都得到 CURRENT_TIMESTAMP)和 UPDATE(只有 Edit_date 列被更改)时自动填充

该操作由以下代码完成:

...CreationDatetimestamp NOT NULL DEFAULT '0000-00-00 00:00:00', EditDate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,...

我需要将类型从 TIMESTAMP 更改为 DATE 并尝试过:

...
`CREATED_DATE` date NOT NULL DEFAULT '0000-00-00',
`EDITED_DATE` date NOT NULL DEFAULT CURRENT_DATE ON UPDATE CURRENT_DATE,
...

我怎样才能获得相同的行为。任何回复将不胜感激。

【问题讨论】:

  • 哪个版本的 MySQL?在 v5.6.5 之前,只有 TIMESTAMP 列可以自动初始化并更新为当前日期和时间,并且仍然是 CURRENT_TIMESTAMP 而不是 CURRENT_DATE

标签: mysql date datetime


【解决方案1】:

不,除非您使用的是 mysql 5.6.5,否则这是不可能的 在 5.6.5 之前唯一可用的选项是使用字段类型作为时间戳,然后设置一个不固定的默认值。

数据类型规范中的 DEFAULT value 子句表示 列的默认值。除了一个例外,默认值必须 是一个常数;它不能是函数或表达式。这表示, 例如,您不能将日期列的默认值设置为 NOW() 或 CURRENT_DATE 等函数的值。例外 是您可以将 CURRENT_TIMESTAMP 指定为默认值 时间戳

如果您使用的是 mysql 5.6.5,那么您可以为 DATETIME 数据类型设置此行为

http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

【讨论】:

  • 感谢阿比克的回答。
猜你喜欢
  • 2016-12-30
  • 2016-04-21
  • 2019-08-10
  • 2014-07-25
  • 2020-03-14
  • 2011-11-04
  • 2017-10-09
  • 2011-01-04
  • 1970-01-01
相关资源
最近更新 更多