MySQL默认值 - YEAR(CURRENT_DATE)

时间:2011-04-16 13:41:27

标签: mysql sql mysql-error-1067

我正在尝试使用

列创建表格
model_year smallint(4) not null default YEAR(CURRENT_DATE)

但是有一个错误(默认值无效)。 我该怎么做才能为今年的model_year设置默认值?

2 个答案:

答案 0 :(得分:3)

来自MySQL doc pages(我的大胆):

  

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

我怀疑你要么在插入行时指定实际值。


如果您不想这样做,可以允许NULL,然后定期用另一个进程扫描数据库:

update table mytable set model_year = year(current_date) where model_year is null

但这是一个kludge,而且引导起来相当危险,因为列中会有一段时间存在NULL。

这是您的所有疑问都必须考虑的因素,导致丑陋,如:

select a, b, model_year from mytable where model_year is not null
union all
select a, b, year(current_date) from mytable where model_year is null

我自己去了非默认路线。

答案 1 :(得分:0)

您需要一个存储过程(抱歉,我不知道MySQL语法)。您可以设置在INSERT或UPDATE上触发的存储过程,该存储过程在模型年份列中查找NULL,并将其替换为设置模型年份的相同INSERT或UPDATE。

相关问题