创建一个列'日期'默认值为当前日期时间MYSQL

时间:2015-03-10 14:42:52

标签: mysql

以下是我的SQL查询,它会抛出错误: -

CREATE TABLE IF NOT EXISTS USER_PROFILE(Id INT PRIMARY KEY AUTO_INCREMENT, date DATETIME NOT NULL DEFAULT NOW) ;

它说Invalid default value for 'date'

我也尝试了NOW()的同义词,即CURRENT_TIMESTAMP,但仍然是同样的错误。

如何使用默认值当前时间创建列日期?

在文档页面上,它表示以这种方式分配

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP
);

2 个答案:

答案 0 :(得分:2)

来自文件

  

数据类型规范中的DEFAULT值子句表示a   列的默认值。除了一个例外,默认值必须   是一个常数;它不能是一个功能或表达。这意味着,   例如,您不能将日期列的默认值设置为   NOW()或CURRENT_DATE等函数的值。例外   是您可以指定CURRENT_TIMESTAMP作为TIMESTAMP的默认值   和DATETIME列

因此默认值中不允许使用任何函数,因此第一个查询失败。

再次来自文件

  

从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动生成   初始化并更新到当前日期和时间(即,   当前时间戳)。在5.6.5之前,这仅适用于TIMESTAMP,和   每个表最多一个TIMESTAMP列。首先说明如下   描述MySQL 5.6.5及更高版本的自动初始化和更新,   然后是5.6.5之前版本的差异。

Before 5.6.5, this is true only for TIMESTAMP

所以你的mysql版本小于5.6.5,因此第二个查询也失败了。

因此您需要将表格创建为

CREATE TABLE IF NOT EXISTS 
USER_PROFILE
(
  Id INT PRIMARY KEY AUTO_INCREMENT, 
  date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ;

答案 1 :(得分:0)

可能是DATE作为保留字,在它到达DEFAULT子句时会使它混淆。尝试使用其他名称,如果可行,请尝试引用“日期”。