Из страниц документации MySQL (мой жирный):
Предложение DEFAULT
value в спецификации типа данных указывает значение по умолчанию для столбца. За одним исключением, значение по умолчанию должно быть константой; это не может быть функция или выражение . Это означает, например, что вы не можете установить значение по умолчанию для столбца даты равным значению функции, например NOW()
или 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
Я бы сам пошел по нестандартному маршруту.