Одна таблица Mysql с несколькими столбцами временных меток
Я хочу иметь один стол с двумя TIMESTAMP
столбцы. Один столбец, чтобы отслеживать, когда запись была создана, а другой, чтобы отслеживать, когда она была изменена. Я хочу, чтобы эти значения обрабатывались базой данных. Я не хочу, чтобы мой слой приложения должен был думать об этом.
Я знаю, что если у вас есть с DEFAULT CURRENT_TIMESTAMP
или ON UPDATE CURRENT_TIMESTAMP
вы не можете иметь другой . Вы можете использовать DATETIME
но нет никакого способа по умолчанию, что я знаю, за пределами a спусковой крючок.
я обнаружил, что ты может иметь несколько TIMESTAMP
колонки оставить без DEFAULT
или ON UPDATE
и вставить NULL
при создании записи, в результате чего каждый получить текущую метку времени. С этого момента первый столбец будет автоматически обновляться.
это работает фантастически, но это оставляет меня с забавным чувством. Как это может быть ошибка, и она может быть исправлена в любое время. Если это так, как он должен работать, то так быть им. Я весело пойду своей дорогой. Может кто-нибудь сказать мне, если это лучший способ сделать это или я должен использовать триггеры?
3 ответа:
это задокументировано в документах MySQL:
кроме того, вы можете инициализировать или обновить любой столбец метки времени текущая дата и время, присвоив ему нулевое значение, если это не было определяется с помощью атрибута NULL, чтобы разрешить значения NULL.
http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
версии MySQL до 5.6.1 не позволяли бы два
TIMESTAMP
столбцы в той же таблице, если только, как вы правильно отметили, без значений по умолчанию и разрешения null.MySQL 5.6.+ позволяет два или более
TIMESTAMP
столбцы в таблице.подробнее здесь: http://shankargopal.blogspot.in/2013/03/mysql-566-timestamp-columns-and-default.html
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 по умолчанию имеет значение 0, а столбец ts2 TIMESTAMP по умолчанию имеет значение CURRENT_TIMESTAMP. Подробнее здесь http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html