2010-05-16 2 views
55

У меня есть метка времени в таблице mysql с атрибутом «ON UPDATE CURRENT_TIMESTAMP». Есть ли способ вручную отключить обновление временной метки по особому случаю? (например: обновить запись, чтобы пересмотреть запись в блоге, но не переименовывать ее)MySQL: Обновление записи БЕЗ обновления временной отметки

ответ

38

Есть ли способ вручную отключить обновление временной метки по особому случаю? (Например: обновление записи пересмотреть запись в блоге, но не возобновлять срок его)

Похоже, вам нужно настроить ограничение по умолчанию, так что он заполняет столбец при вставке только:

DEFAULT CURRENT_TIMESTAMP 

Изменение этого только означает, что любые изменения не будут вызывать значение временной метки, которое будет обновляться. IE: Если вы вчера создали блог-блог и исправили опечатку сегодня - дата в столбце будет по-прежнему за вчерашний день.

+0

Можете ли вы показать инструкцию SQL для обновления поля для других, я понял это для себя? –

7

не использовать временные метки, но отслеживать время вручную.

, если вы действительно хотите, чтобы обновить запись и не обновлять его использование метки времени:

UPDATE `table` SET `timestamp` = `timestamp`, `col` = 'new data' …; 
+11

"не использовать метки времени", то почему? – Petah

+0

Я тоже хотел бы ответить на вопрос @ Петаха ... – ryvantage

+2

Они могут представлять только время от 1.1.1970 до 31.12.2037; автоматически обновляется только первый столбец с меткой времени; при восстановлении с резервных временных меток настраиваются на локальный часовой пояс. И, в зависимости от вашего приложения, вы можете не захотеть, чтобы этот столбец был обновлен при запуске оператора обновления sql в вашем backand (вам нужно только обновить временную метку при использовании внешнего интерфейса для редактирования данных) – knittl

96

Вы можете вручную установить значение столбца его текущее значение в команде обновления:

UPDATE table SET x=y, timestampColumn=timestampColumn WHERE a=b; 

Если вы не установите значение в запросе, оно будет обновлено до текущей метки времени в соответствии с определением таблицы.

+0

Хотя это работает, этот подход медленнее, чем удаление правила об обновлении значения. – Mikhail

+9

«медленнее» - сколько? Дольше, чем требуется OP, чтобы удалить магию 'ON UPDATE', добавьте' NOW() 'ко всем его другим запросам и повторите проверку своего приложения? – Andy

+0

Насколько медленнее зависит количество обновляемых строк. Если вы работаете с системными журналами буквально с миллионами строк, это не просто медленно - при каждом выполнении этого запроса он медленный. Я не предлагаю удалить значение 'DEFAULT'; просто 'ON UPDATE' – Mikhail

15

Чтобы сделать вашу таблицу/метку времени автоматическое обновление:

ALTER TABLE myTable 
CHANGE myTimestampColumn 
     myTimestampColumn TIMESTAMP NOT NULL 
         DEFAULT CURRENT_TIMESTAMP 
         ON UPDATE CURRENT_TIMESTAMP; 

Чтобы сделать его не автоматического обновления:

ALTER TABLE myTable 
CHANGE myTimestampColumn 
     myTimestampColumn TIMESTAMP NOT NULL 
         DEFAULT CURRENT_TIMESTAMP; 

Примечание: "по умолчанию current_timestamp" часть только наборы это текущая марка по умолчанию, так как поле не-null. Если хотите, вы можете удалить как null, так и значение по умолчанию.

0

Если вы изменяете timestemp при обновлении, вы должны принять во внимание, что если значение было обновлено, но не изменено (обновлено значение сохранения), то он не будет обновлять «on update Current_timestemp», и в этой ситуации вы следует установить timestemp вручную

SET LastUpdatedDate=NOW() WHERE

идея пришла здесь: Touch MYSQL record to update TIMESTAMP field

Смежные вопросы