我在表用户中有两列,即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;
它给我错误:错误1067(42000):无效的默认值为'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
)