2011-02-02 14 views
24

¿Existe alguna forma de que mysql pueda almacenar la marca de tiempo automáticamente en una fila de registro cada vez que se crea? Intenté usar la marca de tiempo (tipo de datos) con current_timestamp como valor predeterminado, pero luego me di cuenta de que esto se actualizará cada vez que se actualice el registro. Solo necesito algo que almacene crear marca de tiempo.mysql almacena automáticamente la creación de registros marca de tiempo

Gracias

Respuesta

55

Ajuste el DEFAULT constraint to use CURRENT_TIMESTAMP:

CREATE TABLE ... 
    your_date_column DATETIME DEFAULT CURRENT_TIMESTAMP 
    ... 

Para una tabla existente, utilice el ALTER TABLE statement:

ALTER TABLE your_table 
ALTER COLUMN date_column SET DEFAULT CURRENT_TIMESTAMP 

A menos que especifique un valor para el date_column, el valor por defecto será la fecha & vez que se ejecutó la sentencia INSERT. NULL y DEFAULT o valores válidos para usar la restricción predeterminada de lo contrario, suponiendo que la columna es nulable.

+0

THanks OMG, pero esto es lo que probé. ¿No se actualizaría esta marca de tiempo cada vez que se actualice el registro? –

+9

@gaurav: No. Si especifica la cláusula 'ON UPDATE' adicional, la columna se actualizará en una ACTUALIZACIÓN; de lo contrario, se dejará en paz ... suponiendo que no especifique un valor diferente en una ACTUALIZACIÓN declaración contra la columna. –

+0

OK gracias por aclarar esto. ¡Apreciado! –

3

Puede obtener todos los detalles sobre las marcas de tiempo en MySQL en https://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html.

El punto que le importa es que si define una columna de marca de tiempo como cláusula DEFAULT CURRENT_TIMESTAMP y no tiene una cláusula ON UPDATE, la columna tiene la marca de tiempo actual pero no se actualiza automáticamente.

Pero ten cuidado. Lo obvio que quiero hacer es tener dos columnas de marca de tiempo, una es la hora de creación y la otra es la hora de la última actualización. Desafortunadamente, es una limitación documentada de MySQL que MySQL no es compatible con esto. No tengo idea de por qué MySQL tiene una limitación tan extraña: ninguna otra base de datos importante tiene problemas con este caso de uso común.

+0

Esta restricción fue levantada con MySQL versión 5.6.5 en abril de 2014 http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html –

1

FYI = "Fecha y hora" es la fecha y la hora corregidas. "Timestamp" es fecha y hora variables: hora del sistema.

Por lo tanto, tiene dos columnas. One Create Col, One Update Col.

-2

SELECCIONAR * FROM test WHERE marca de tiempo> = CURDATE() Y marca de tiempo < CURDATE() + INTERVALO 1 DAY ORDER BY timestamp;

0

El siguiente comando creará una tabla hola
1. Identificación del número entero
2. create_at con el tiempo actual.

create table hello (id int, created_at datetime DEFAULT CURRENT_TIMESTAMP); 
Cuestiones relacionadas