Почему может быть только один столбец TIMESTAMP с CURRENT_TIMESTAMP в предложении DEFAULT или ON UPDATE?
CREATE TABLE `foo` (
`ProductID` INT(10) UNSIGNED NOT NULL,
`AddedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdatedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=INNODB;
Ошибка, которая приводит:
Код ошибки: 1293
Неправильное определение таблицы; может быть только один столбец TIMESTAMP с CURRENT_TIMESTAMP в предложении DEFAULT или ON UPDATE
mysql
timestamp
mysql-error-1293
ripper234
источник
источник
CURRENT_TIMESTAMP
inDEFAULT
илиON UPDATE
clause, если есть столбец сTIMESTAMP
типом данных, независимо от того, получил ли он дополнительное предложение!CREATE TABLE foo (created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_on TIMESTAMP)
, но не это:CREATE TABLE foo (updated_on TIMESTAMP, created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP)
timestamp
столбец обнуляемого т.е.null
. Если первыйtimestamp
столбецnot null
то по умолчаниюDEFAULT CURRENT_TIMESTAMP
иON UPDATE CURRENT_TIMESTAMP
будет добавлен. stackoverflow.com/a/13544181/2859238timestamp
столбце установлено явное значение по умолчанию, напримерdefault '0000-00-00 00:00:00'
. Если столбец обнуляемый или явно задано значение по умолчанию, тоDEFAULT CURRENT_TIMESTAMP
иON UPDATE CURRENT_TIMESTAMP
НЕ будет добавленоОтветы:
Это ограничение, которое было только из-за исторических, наследственных причин кода, было снято в последних версиях MySQL:
http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html
источник
Я тоже удивился, что давным-давно. Я немного искал в своей истории, и я думаю, что этот пост: http://lists.mysql.com/internals/34919 представляет полуофициальную позицию MySQL (до вмешательства Oracle;))
Коротко:
Таким образом, их объяснение «потому что это реализовано так». Звучит не очень научно. Я думаю, все это происходит из какого-то старого кода. Это предлагается в приведенной выше ветке: «перенос с того момента, когда было установлено / обновлено только первое поле отметки времени».
Ура!
источник
Мы можем указать значение по умолчанию для отметки времени, чтобы избежать этой проблемы.
Этот пост дает подробный обходной путь: http://gusiev.com/2009/04/update-and-create-timestamps-with-mysql/
источник
Действительно ошибка реализации.
Нативный подход в MySQL заключается в том, чтобы самостоятельно обновить дату создания (если она вам нужна) и заставить MySQL беспокоиться о отметке времени
update date ? update date : creation date
следующим образом:При создании Вставьте NULL:
Значения NULL для метки времени по умолчанию интерпретируются как CURRENT_TIMESTAMP.
В MySQL первый TIMESTAMP столбец таблицы получает как
DEFAULT CURRENT_TIMESTAMP
иON UPDATE CURRENT_TIMESTAMP
атрибут, если никакие атрибуты не заданы для него. Вот почему столбец TIMESTAMP с атрибутами должен стоять первым, иначе вы получите ошибку, описанную в этой теме.источник
Такие как:
источник
Можно исправить это, поместив его в поле updatedDate и запустив триггер, который обновляет поле AddedDate со значением ОбновленоDate, только если AddedDate имеет значение null.
источник
Объединяя различные ответы:
В MySQL 5.5
DEFAULT CURRENT_TIMESTAMP
иON UPDATE CURRENT_TIMESTAMP
не может быть добавлен,DATETIME
но только включенTIMESTAMP
.Правила:
1) не более одного
TIMESTAMP
столбца на таблицу можно автоматически (или вручную [ Моё добавление ]) инициализировать или обновить до текущей даты и времени. (MySQL Docs).Так что только один
TIMESTAMP
может иметьCURRENT_TIMESTAMP
вDEFAULT
илиON UPDATE
пункт2) Первый
NOT NULL
TIMESTAMP
столбец без явногоDEFAULT
значения наподобиеcreated_date timestamp default '0000-00-00 00:00:00'
неявно получит a,DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
и, следовательно, последующиеTIMESTAMP
столбцы не могут быть даныCURRENT_TIMESTAMP
вDEFAULT
или вON UPDATE
предложенииДругой вариант (но
updated_date
это первый столбец):источник
Попробуй это:
источник
created_at
колонку самостоятельно. Я думаю, что это то, что я хочу сказать намеренно.Это ограничение в версии MYSQL 5.5. Вам нужно обновить версию до 5.6.
Я получаю эту ошибку при добавлении таблицы в MYSQL
таблица выглядит примерно так.
После некоторого времени чтения об изменениях в различных версиях MYSQL и некоторых поисках в Google. Я обнаружил, что в MYSQL версии 5.6 были внесены некоторые изменения по сравнению с версией 5.5.
Эта статья поможет вам решить проблему. http://www.oyewiki.com/MYSQL/Incorrect-table-definition-there-can-be-only-one-timestamp-column
источник