2

我正在尝试创建具有类似列的表

model_year smallint(4) not null default YEAR(CURRENT_DATE)

但是有一个错误(无效的默认值)。我可以做些什么来为 model_year 当前年份设置默认值?

4

2 回答 2

3

MySQL 文档页面(我的粗体):

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

我怀疑您在插入行时必须指定实际值。


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

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

但这是一个杂乱无章的问题,而且启动起来相当危险,因为会有一段时间列中存在 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

我自己会走非默认路线。

于 2011-04-16T13:43:15.060 回答
0

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

于 2011-04-16T13:54:02.153 回答