2008-09-30 27 views
21

¿Es posible definir una columna de marca de tiempo en una tabla MySQL que se actualizará automáticamente cada vez que se modifique un campo en la misma fila? Idealmente, esta columna debería establecerse inicialmente a la hora en que se insertó una fila.columna timestamp mysql

Cheers, Don

Respuesta

16

Esa es la funcionalidad por defecto del tipo de columna timestamp. Sin embargo, tenga en cuenta que el formato de este tipo es aaaammddhhmmss (todos los dígitos, sin dos puntos u otra separación).

EDIT: El comentario anterior sobre el formato sólo es cierto para las versiones de MySQL 4.1 < ... Las versiones posteriores formatearlo como un DateTime

+3

De acuerdo con los documentos de MySQL 5.0, el tipo de marca de tiempo tiene el mismo formato que el de fecha y hora (por ejemplo, 'AAAA-MM-DD HH: MM: SS'). –

0

IIRC, la primera columna de una tabla de tipo de marca de tiempo se establece cuando se crea un registro y no se puede cambiar. La segunda columna del tipo de marca de tiempo se establece cada vez que se actualiza un registro. O viceversa.

No he trabajado mucho en MySQL, por lo que querrá verificar esto.

31

Puede utilizar la columna de marca de tiempo como otros carteles mencionados. Aquí está el SQL se puede utilizar para agregar la columna en:

ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ; 

Esto añade una columna llamada 'LastUpdated' con un valor por defecto de la fecha/hora actual. Cuando ese registro se actualiza (digamos 5 minutos más tarde) esa marca de tiempo se actualizará automáticamente a la hora actual.

+6

Lo siguiente parece ser suficiente: ALTER TABLE 'table1' ADD' lastUpdated' TIMESTAMP; –

0

Una marca de tiempo de MySQL se configura con la creación o la hora de actualización solo si su valor predeterminado está configurado como tal. ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP.
De lo contrario, funciona igual que un campo DateTime, solo que es relativo al 01/01/1981 UTC, por lo que es un momento absoluto en el tiempo que no depende de una zona horaria específica como es DateTime.

1

Esto es lo que he observado (MySQL 5.7.11) -

La primera columna TIMESTAMP en la tabla se pone fecha y hora actual como el valor predeterminado. Por lo tanto, si realiza un INSERT o UPDATE sin proporcionar un valor, la columna obtendrá la marca de tiempo actual.

Cualquier columna TIMESTAMP posterior debe tener un valor predeterminado explícitamente definido. Si tiene dos columnas TIMESTAMP y no especifica un valor predeterminado para la segunda columna, obtendrá este error al intentar crear la tabla:

ERROR 1067 (42000): Valor predeterminado no válido para 'COLUMN_NAME'

Cuestiones relacionadas