Одна таблица Mysql с несколькими столбцами временных меток


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

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

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

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

3 57

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