Значение по умолчанию для MySQL - YEAR (CURRENT_DATE) - PullRequest
2 голосов
/ 16 апреля 2011

Я пытаюсь создать таблицу со столбцом типа

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

Но есть ошибка (недопустимое значение по умолчанию).Что я могу сделать, чтобы установить значение по умолчанию для года модели_ года?

Ответы [ 2 ]

3 голосов
/ 16 апреля 2011

Из страниц документации 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

Я бы сам пошел по нестандартному маршруту.

0 голосов
/ 16 апреля 2011

Вам потребуется хранимая процедура (извините, я не знаю синтаксис MySQL). Вы можете настроить хранимую процедуру, которая будет вызывать INSERT или UPDATE, которая ищет NULL в столбце модельного года и заменяет ее идентичной INSERT или UPDATE, которая устанавливает модельный год.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...