2010-05-16 32 views
55

Tengo una marca de tiempo en una tabla mysql con el atributo "ON UPDATE CURRENT_TIMESTAMP". ¿Hay alguna manera de desactivar manualmente la actualización de la marca de tiempo en una ocasión especial? (p. ej .: actualizar la entrada para revisar una publicación de blog, pero no volver a fecharla)MySQL: Actualizando la entrada SIN actualizar la marca de tiempo

Respuesta

38

¿Hay alguna forma de desactivar manualmente la actualización de la marca de tiempo en una ocasión especial? (Por ejemplo: la actualización de la entrada para revisar un blog, pero no para volver a fecha)

Suena como que necesita para configurar la restricción predeterminada para que se rellena la columna de la inserción solamente:

DEFAULT CURRENT_TIMESTAMP 

Cambiarlo solo significa que cualquier revisión no activará el valor de la marca de tiempo para actualizarse. IE: Si creó la publicación de blog ayer, y corrigió un error tipográfico hoy, la fecha en la columna seguirá siendo para ayer.

+0

¿Puede mostrar una declaración de SQL para actualizar el campo para otros, me di cuenta por mí mismo? –

7

No utilice marcas de tiempo, pero registre los tiempos manualmente.

si realmente desea actualizar un registro y no actualiza su uso marca de tiempo:

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

"no utilice marcas de tiempo", ¿por qué? – Petah

+0

Quisiera una respuesta a la pregunta de @ Petah, también ... – ryvantage

+2

Solo pueden representar los tiempos del 1.1.1970 al 31.12.2037; solo la primera columna de marca de tiempo se actualiza automáticamente; cuando la restauración de una fecha y hora de respaldo se ajusta a la zona horaria local. Y, dependiendo de su aplicación, es posible que no desee tener esa columna actualizada cuando ejecuta una declaración de actualización sql en su backand (solo desea que la marca de tiempo se actualice al usar su frontend para editar datos) – knittl

96

Puede ajustar manualmente el valor de la columna a su valor actual en el comando de actualización:

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

Si no establece el valor en la consulta, se actualizará a la marca de tiempo actual según la definición de la tabla.

+0

Aunque esto funciona, este enfoque es más lento que eliminar la regla sobre la actualización del valor. – Mikhail

+9

"más lento" - ¿cuánto? Más tiempo de lo que le toma al OP para eliminar la magia 'ON UPDATE', agregue' NOW() 'a todas sus otras consultas y vuelva a probar su aplicación. – Andy

+0

Cuánto más lento depende del número de filas que está actualizando. Si está trabajando con registros del sistema con literalmente millones de filas, entonces no solo es lento, sino que es lento cada vez que ejecuta esa consulta. No sugiero eliminar el valor 'DEFAULT'; solo el 'ACTUALIZADO ' – Mikhail

15

Para hacer su mesa/marca de tiempo de actualización automática:

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

para que sea no de actualización automática:

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

NOTA: El "default current_timestamp" parte sólo conjuntos al sello actual en el tiempo predeterminado, ya que el campo no es nulo. Puede eliminar tanto el no nulo como el predeterminado, si lo desea.

0

Si cambia el timestemp en la actualización, debe tener en cuenta que si el valor se actualizó pero no se modificó (se actualizó el valor guardado), no se actualizará "en la actualización Current_timestemp" y en esta situación debe establecer el timestemp manualmente

SET LastUpdatedDate=NOW() WHERE

la idea surgió de aquí: Touch MYSQL record to update TIMESTAMP field

Cuestiones relacionadas