小编典典

将 NOW() 设置为日期时间数据类型的默认值?

all

我在表用户中有两列,即registerDate and lastVisitDate由日期时间数据类型组成。我想做以下事情。

  1. 将 registerDate 默认值设置为 MySQL NOW()
  2. 将 lastVisitDate 默认值设置为0000-00-00 00:00:00而不是默认使用的 null。

因为表已经存在并且已有记录,所以我想使用修改表。我试过使用下面的两段代码,但都不起作用。

ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

它给了我错误:ERROR 1067 (42000): Invalid default value for 'registerDate'

我可以在 MySQL 中将默认日期时间值设置为 NOW() 吗?


阅读 63

收藏
2022-06-23

共1个答案

小编典典

从 MySQL 5.6.5 开始,您可以使用DATETIME具有动态默认值的类型:

CREATE TABLE foo (
    creation_time      DATETIME DEFAULT   CURRENT_TIMESTAMP,
    modification_time  DATETIME ON UPDATE CURRENT_TIMESTAMP
)

甚至结合两个规则:

modification_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

参考:
http ://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-
available .html

在 5.6.5
之前,您需要使用TIMESTAMP数据类型,它会在记录被修改时自动更新。然而不幸的是,每个表只能存在一个自动更新的TIMESTAMP字段。

CREATE TABLE mytable (
  mydate TIMESTAMP
)

见:http ://dev.mysql.com/doc/refman/5.1/en/create-
table.html

如果您想阻止 MySQL 更新时间戳值 on UPDATE(以便它仅触发 on INSERT),您可以将定义更改为:

CREATE TABLE mytable (
  mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
2022-06-23