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

Одна таблица Mysql с несколькими столбцами TIMESTAMP

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

Я знаю, что если у вас есть столбец TIMESTAMP с DEFAULT CURRENT_TIMESTAMP или ON UPDATE CURRENT_TIMESTAMP, у вас не может быть другого столбца TIMESTAMP. Вы можете использовать DATETIME, но я не знаю способа его использования по умолчанию вне триггера.

Я обнаружил, что у вас может быть несколько столбцов TIMESTAMP, оставив каждый без DEFAULT или ON UPDATE и вставив NULL при создании записи, в результате чего у каждого будет текущая метка времени. С этого момента первый столбец будет автоматически обновляться.

Это работает фантастически, но вызывает у меня странное чувство. Как это может быть ошибка, и это может быть исправлено в любое время. Если это так, как это должно работать, пусть будет так. Я весело продолжу свой путь. Может кто-нибудь сказать мне, если это лучший способ сделать это или я должен использовать триггеры?

4b9b3361

Ответ 1

Он документирован в документах MySQL:

Кроме того, вы можете инициализировать или обновить любой столбец TIMESTAMP до текущую дату и время, присвоив ему значение NULL, если оно не было определяемый атрибутом NULL для разрешения значений NULL.

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

Ответ 2

MySQL версии до 5.6.1 не позволяли бы двум столбцам TIMESTAMP в одной и той же таблице, если только вы не отметили правильность значений по умолчанию и допустили null.

MySQL 5.6. + разрешает два или более столбца TIMESTAMP в таблице.

Подробнее здесь: http://shankargopal.blogspot.in/2013/03/mysql-566-timestamp-columns-and-default.html

Ответ 3

MySQL допускает использование нескольких столбцов TIMESTAMP в одной таблице. Проверьте этот пример:

CREATE TABLE t1 (
  ts1 TIMESTAMP DEFAULT 0,
  ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t2 (
  ts1 TIMESTAMP NULL,
  ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t3 (
  ts1 TIMESTAMP NULL DEFAULT 0,
  ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                ON UPDATE CURRENT_TIMESTAMP);

Обратите внимание, что столбец ts1 TIMESTAMP имеет значение DEFAULT со значением VALUE 0, а столбец ts2 TIMESTAMP имеет значение DEFAULT со значением CURRENT_TIMESTAMP. Больше информации здесь http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html