CURDATE()导致语法错误

时间:2011-10-18 05:38:06

标签: mysql database

大家

我想添加一个start_date列,其默认值是当前日期(),所以我使用以下命令:

更改表验证添加列start_date日期默认值CURDATE()

但它没有用,告诉我它有语法错误。

使用以下命令效果很好:

alter table validation add column start_date date default 0

任何建议都表示赞赏。

3 个答案:

答案 0 :(得分:10)

来自online documentation(我的大胆):

  

数据类型规范中的DEFAULT value子句指示列的默认值。除了一个例外,默认值必须为常量;它不能是一种功能或表达。

     

这意味着,例如,您不能将日期列的默认值设置为NOW()或CURRENT_DATE等函数的值。

     

例外情况是您可以将CURRENT_TIMESTAMP指定为TIMESTAMP列的默认值。

这就是为什么default 0有效(常数),但default curdate()没有(一个函数)。

你(至少)有几种可能来解决这个问题。

第一种方法是使用时间戳列而不是日期列,并将其默认值设置为CURRENT_TIMESTAMP。不幸的是,这意味着你必须将它转回到提取它的日期。

第二种方法是使用触发器来设置列值,而不是使用默认值。例如,使用插入触发器将相关列设置为当前日期。

答案 1 :(得分:0)

  

数据类型规范中的DEFAULT值子句表示a   列的默认值。除了一个例外,默认值必须   是一个常数;它不能是一种功能或表达。

答案 2 :(得分:0)

您是否尝试过SYSDATE()。

Select SYSDATE();

这将以这种格式提供:2011-09-29 16:11:39