问题描述
我在表用户中有两列,即 registerDate 和 lastVisitDate
,它们由日期时间数据类型组成.我想做以下事情.
I have two columns in table users namely registerDate and lastVisitDate
which consist of datetime data type. I would like to do the following.
- 将 registerDate 默认值设置为 MySQL NOW()
- 将 lastVisitDate 默认值设置为
0000-00-00 00:00:00
而不是它默认使用的 null.
- Set registerDate defaults value to MySQL NOW()
- Set lastVisitDate default value to
0000-00-00 00:00:00
Instead of null which it uses by default.
因为表已经存在并且有现有记录,所以我想使用修改表.我试过使用下面的两段代码,但都不起作用.
Because the table already exists and has existing records, I would like to use Modify table. I've tried using the two piece of code below, but neither works.
它给了我错误:ERROR 1067 (42000): Invalid default value for 'registerDate'
是否可以在 MySQL 中将默认日期时间值设置为 NOW()?
Is it possible for me to set the default datetime value to NOW() in MySQL?
推荐答案
从 MySQL 5.6.5 开始,您可以使用带有动态默认值的 DATETIME
类型:
As of MySQL 5.6.5, you can use the DATETIME
type with a dynamic default value:
或者甚至结合两个规则:
Or even combine both rules:
参考:
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
字段.
Prior to 5.6.5, you need to use the TIMESTAMP
data type, which automatically updates whenever the record is modified. Unfortunately, however, only one auto-updated TIMESTAMP
field can exist per table.
参见:http://dev.mysql.com/doc/refman/5.1/en/create-table.html
如果你想阻止 MySQL 在 UPDATE
上更新时间戳值(这样它只在 INSERT
上触发)你可以将定义更改为:
If you want to prevent MySQL from updating the timestamp value on UPDATE
(so that it only triggers on INSERT
) you can change the definition to:
这篇关于将 NOW() 设置为日期时间数据类型的默认值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!