MySQL не разрешает ON UPDATE CURRENT_TIMESTAMP для поля DATETIME
Я видел много взаимосвязанных вопросов, но я не могу поместить свой палец на этот конкретный вопрос:
У меня есть таблица MySQL с TIMESTAMP (для создания поля) и DATETIME (каждый раз, когда поле обновляется). Это выглядит так:
CREATE TABLE 'vis' (
ID BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL,
ENTRY VARCHAR(255),
AUTHOR VARCHAR(255),
CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UPDATED_AT DATETIME ON UPDATE CURRENT_TIMESTAMP,
UPDATED_BY VARCHAR(255)
)
Когда я пытаюсь это сделать, ошибка, которую я получаю, это: (SQL Error: 1294 SQL State: HY000) - Invalid ON UPDATE clause for 'updated_at' field
Всюду, где я читал (даже при переполнении стека), я должен это сделать, но я получаю эту ошибку. Возможно, есть еще один способ иметь поле, которое автоматически обновляет время каждый раз, когда я его обновляю?
Я использую MySQL Server 5.5.
Ответы
Ответ 1
DATETIME
не может использовать CURRENT_TIMESTAMP
при обновлении. Вместо этого измените его на TIMESTAMP
.
Или рассмотрим использование триггера для этой ситуации: http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html
EDIT: Как и в комментариях (спасибо @АлександрФишер!), это уже не так, как MySQL 5.6.5, поэтому другое решение - это, возможно, обновление вашего сервера.
Ответ 2
Эта функция, как представляется, была введена в 5.6. Работает, как и ожидалось, при установке по умолчанию OS X.
Ссылка: Автоматические свойства временной метки перед MySQL 5.6.5
Ответ 3
MySQL не поддерживает функции, которые будут использоваться для значений по умолчанию DateTime
. (См. Тип данных MySQL Defaults.)
Ответ 4
Да, и если вы измените его на timestamp, ни с DEFAULT CURRENT_TIMESTAMP
, ни с ON UPDATE CURRENT_TIMESTAMP
, это то же самое, что указано как DEFAULT CURRENT_TIMESTAMP
и ON UPDATE CURRENT_TIMESTAMP
.
Ответ 5
TIMESTAMP и (начиная с MySQL 5.6.5). Типы данных DATETIME предлагают автоматическую инициализацию и обновление до текущей даты и времени. Для получения дополнительной информации см. Раздел 11.3.5, "Автоматическая инициализация и обновление для TIMESTAMP и DATETIME" .
Ответ 6
Вставить и обновить дату/время автоматически
Работает с типом данных: DATETIME или TIMESTAMP
Проверено на: MySQL 5.6.27-2 и MariaDB 10.1.10
Сохраняет текущую дату и время в INSERT
CREATE TABLE table_demo (
...
`CreatedAt` datetime DEFAULT CURRENT_TIMESTAMP
...
);
Сохраняет текущую дату и время в INSERT и UPDATE
CREATE TABLE table_demo (
...
`UpdatedAt` datetime EFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
...
);
Сохраняет текущую дату и время только в UPDATE
ПРИМЕЧАНИЕ: когда значение INSERT по умолчанию "0000-00-00 00:00:00"
CREATE TABLE table_demo (
...
`UpdatedAt` datetime DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP
...
);
Ответ 7
Посмотрите мою фотографию.
Установить столбец Filed Type timestamp, Атрибуты при обновлении CURRENT_TIMESTAMP и Extra также. В моем случае нет проблем после изменения типа подачи в базе данных. Но не обязательно для всех случаев. ![введите описание изображения здесь]()