我在表用户中有两列,即 registerDate 和 lastVisitDate
,它们由 datetime 数据类型组成。我想做以下事情。
- 将 registerDate 默认值设置为 MySQL NOW()
- 将 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() 吗?
最佳答案
从 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 在 UPDATE
上更新时间戳值(以便它仅在 INSERT
上触发),您可以将定义更改为:
CREATE TABLE mytable (
mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
关于mysql - 将 NOW() 设置为日期时间数据类型的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818423/