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

标签 mysql sql datetime mysql-error-1067

我在表用户中有两列,即 registerDate 和 lastVisitDate,它们由 datetime 数据类型组成。我想做以下事情。

  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() 吗?

最佳答案

从 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/

相关文章:

java.sql.SQL语法错误异常 : ORA-01745: invalid host/bind variable name in managed bean

php - 时间戳、时区和夏令时

sql - 使用 datetime 和 php 从 1、7 和 30 天前选择 mysql db 中的记录

mysql - SELECT 在 mysql 上无效

mysql - 如何知道 mysql INSERT 何时完成(多连接)

mysql - mysql中2列按月和年排序

python - 一对多关系 NoForeignKeysError

mysql - 如何在 where 子句中使用 select 中的变量

mysql - 提高该SQL的查询性能

mysql - 如何使用 INSERT INTO OPENQUERY SELECT 将日期时间从 mssql 插入 mysql