MySQL auto-store datetime для каждой строки - PullRequest
43 голосов
/ 19 декабря 2009

В MySQL мне надоело добавлять столбцы dt_created и dt_modified (которые представляют собой метки даты для времени создания и последнего изменения соответственно) во все таблицы, которые есть в моей базе данных.

Каждый раз, когда я INSERT или UPDATE база данных, мне придется использовать ключевое слово NOW(). Это происходит по всей моей настойчивости.

Есть ли эффективная альтернатива, где MySQL может автоматически сохранять хотя бы время данных вставленной строки и разрешать мне ее извлекать?

Ответы [ 6 ]

79 голосов
/ 19 декабря 2009

Вы можете использовать ограничения DEFAULT для установки метки времени:

ALTER TABLE
 MODIFY dt_created datetime DEFAULT CURRENT_TIMESTAMP

ALTER TABLE
 MODIFY dt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Тогда вам не нужно будет указывать NOW() в ваших операторах INSERT / UPDATE.

Ссылка: Свойства TIMESTAMP

10 голосов
/ 04 апреля 2014

Если вы используете phpmyadmin , вы можете сделать это:

enter image description here

9 голосов
/ 20 февраля 2010
ALTER TABLE  `tablename` CHANGE  `dt`  `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

должен быть правильный код.

3 голосов
/ 29 марта 2013

Ну, вы не можете иметь оба:

mysql doc:

Невозможно, чтобы текущая временная метка была значением по умолчанию для одного столбца и значением автоматического обновления для другого столбца.

Грустно, не правда ли?

Однако вы можете использовать null вместо now () , следуя этому совету

1 голос
/ 19 декабря 2009

Подобный вопрос был задан здесь " Timestamp for MySQL ", поле timestamp будет обновляться при каждом обращении к нему. Вы также можете рассмотреть вариант Trigger , размещенный на данной таблице, чтобы автоматически заполнять эти поля для вас. В зависимости от среды в некоторых магазинах / компаниях не нравится использование триггеров, поэтому вам, возможно, придется найти альтернативные способы обхода.

0 голосов
/ 28 апреля 2017

В phpmyadmin вы можете установить enter image description here

OR используйте этот запрос

ALTER TABLE  `tablename`
    CHANGE  `dt_created`  `dt_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
...