Текущая метка времени MySQL при создании и обновлении
Я хочу определить таблицу, которая будет иметь 2 поля метки времени, что-то вроде этого:
CREATE TABLE `msgs` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`msg` VARCHAR(256),
`ts_create` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`ts_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
как это сделать, избегая ошибки:
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
точка, чтобы сохранить желаемое поведение ts_create и ts_update в таблице схемы.
9 ответов:
Это ограничение mySQL, вы не может есть два столбца TIMESTAMP со значениями по умолчанию, которые ссылаются на CURRENT_TIMESTAMP. Единственный способ сделать это-использовать тип DATETIME для ts_create, который, к сожалению, не может иметь значение по умолчанию NOW(). Вы можете свернуть свой собственный триггер, чтобы это произошло.
думаю, это старый пост, но на самом деле я думаю, что mysql поддерживает 2 TIMESTAMP в своих последних выпусках mysql 5.6.25 вот что я использую на данный момент.
вы не можете иметь два столбца TIMESTAMP с одинаковым значением по умолчанию CURRENT_TIMESTAMP на вашей таблице. Пожалуйста, обратитесь к этой ссылке: http://www.mysqltutorial.org/mysql-timestamp.aspx
Я думаю, что это возможно с помощью метода ниже
`ts_create` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `ts_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Я думаю, что вы, возможно, хотите ts_create как datetime (так переименовать -> dt_create) и только ts_update как отметка времени? Это гарантирует, что он остается неизменным после установки.
Я понимаю, что datetime предназначен для значений с ручным управлением, а временная метка немного "особенная" в том, что MySQL будет поддерживать ее для вас. В этом случае, поэтому datetime-это хороший выбор для ts_create.
Я бы сказал, что вам не нужно иметь по умолчанию CURRENT_TIMESTAMP на вашем ts_update: если он пуст, то он не обновляется, поэтому ваше "последнее обновление" - это ts_create.
Это крошечное ограничение Mysql в старой версии, на самом деле после версии 5.6 и более поздних нескольких временных меток работает...
вы можете попробовать это
ts_createОТМЕТКА ВРЕМЕНИ ПО УМОЛЧАНИЮ CURRENT_TIMESTAMP,ts_updateОТМЕТКА ВРЕМЕНИ ПО УМОЛЧАНИЮ NULL ПРИ ОБНОВЛЕНИИ CURRENT_TIMESTAMP
Comments