Колонка timestamp mysql
Можно ли определить столбец timestamp в таблице MySQL, который будет автоматически обновляться каждый раз при изменении поля в той же строке? В идеале этот столбец должен быть первоначально установлен на время, когда была вставлена строка.
Cheers,
Дон
Ответы
Ответ 1
Это стандартная функциональность типа столбца timestamp. Однако обратите внимание, что формат этого типа - yyyymmddhhmsms (все цифры, никакие двоеточия или другое разделение).
РЕДАКТИРОВАТЬ: Вышеупомянутый комментарий о формате применим только для версий MySQL < 4.1... Более поздние версии форматируют его как DateTime
Ответ 2
Вы можете использовать столбец timestamp, как упомянуты другие плакаты. Вот SQL, который вы можете использовать для добавления столбца в:
ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
Это добавляет столбец "lastUpdated" со значением по умолчанию текущей даты/времени. Когда эта запись будет обновлена (скажем, через 5 минут), отметка времени автоматически обновится до текущего времени.
Ответ 3
Это то, что я наблюдал (MySql 5.7.11) -
Первый столбец TIMESTAMP в таблице получает текущую временную метку в качестве значения по умолчанию. Таким образом, если вы внесете INSERT или UPDATE без предоставления значения, столбец получит текущую временную метку.
В каждом последующем столбце TIMESTAMP должно быть явно задано значение по умолчанию. Если у вас есть два столбца TIMESTAMP, и если вы не укажете значение по умолчанию для второго столбца, вы получите эту ошибку при попытке создать таблицу -
ОШИБКА 1067 (42000): недопустимое значение по умолчанию для COLUMN_NAME
Ответ 4
IIRC, первый столбец в таблице типа timestamp устанавливается, когда запись создана и не может быть изменена. Второй столбец типа timestamp устанавливается всякий раз, когда запись обновляется. Или наоборот.
Я не много работал MySQL, поэтому вы хотите проверить это.
Ответ 5
Временная метка MySQL устанавливается с созданием или временем обновления только в том случае, если установлено значение по умолчанию. ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP
.
В противном случае он работает точно так же, как поле DateTime, только то, что оно относительно 1970/01/01 UTC, поэтому это абсолютный момент времени, не зависящий от определенного часового пояса, как DateTime.