Почему MySQL не позволяет мне удалить атрибут "при обновлении CURRENT_TIMESTAMP"? - PullRequest
12 голосов
/ 26 февраля 2011

У меня есть таблица с двумя полями меток времени. Я просто определил их с именем и типом TIMESTAMP, но по какой-то причине MySQL автоматически установил для одного из них значение по умолчанию и атрибут on update CURRENT_TIMESTAMP. Я планировал не иметь значения по умолчанию в любом из полей, но одно из полей называется «date_updated», поэтому я полагаю, что я мог бы установить упомянутый атрибут для этого поля.

К сожалению, это поле "date_created", которое было установлено с атрибутом on update CURRENT_TIMESTAMP, и независимо от того, что я делаю, MySQL не позволит мне удалить его.

Я попытался отредактировать поле "date_created" и удалить атрибут. При нажатии сохранить атрибут возвращается. Я также попытался выбрать оба поля, удалив атрибут из одного из них и установив его в другом. Это дает мне ошибку #1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause, и внезапно оба атрибутных столбца в значениях устанавливаются на on update CURRENT_TIMESTAMP результат:

Error
SQL query:

ALTER TABLE  `pages` CHANGE  `date_created`  `date_created` TIMESTAMP NOT NULL ,
CHANGE  `date_updated`  `date_updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL

MySQL said: 

#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 

Должен ли я действительно воссоздать оба этих столбца в правильном порядке, чтобы это исправить?

Я хотел бы знать, как я мог бы решить эту проблему правильно, для дальнейшего использования.

Спасибо


Теперь я тоже пытался запустить

ALTER TABLE pages
CHANGE date_created
 date_created TIMESTAMP NOT NULL

Ответы [ 2 ]

16 голосов
/ 26 февраля 2011

Вы должны указать DEFAULT CURRENT_TIMESTAMP (или DEFAULT 0)

ALTER TABLE pages CHANGE date_created date_created TIMESTAMP NOT NULL DEFAULT 0,
CHANGE  `date_updated`  `date_updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL
0 голосов
/ 16 июля 2014

Начиная с версии MySQL 5.6.6, вы можете использовать опцию licit_defaults_for_timestamp в файле конфигурации, поэтому столбцы отметок времени не будут иметь 'DEFAULT CURRENT_TIMESTAMP' или 'ON UPDATE CURRENT_TIMESTAMP' атрибуты по умолчанию. Также будет возможно установить эти столбцы в NULL, если они не объявлены как NOT NULL.

См .: http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp

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