Подтвердить что ты не робот

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.

4b9b3361

Ответ 1

DATETIME не может использовать CURRENT_TIMESTAMP при обновлении. Вместо этого измените его на TIMESTAMP.

Или рассмотрим использование триггера для этой ситуации: http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html

EDIT: Как и в комментариях (спасибо @АлександрФишер!), это уже не так, как 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.

Ответ 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 также. В моем случае нет проблем после изменения типа подачи в базе данных. Но не обязательно для всех случаев. введите описание изображения здесь