2009-12-19 16 views
37

En MySQL, estoy cansado de agregar las columnas dt_created y dt_modified (que son marcas de fecha y hora de creación y última modificación respectivamente) a todas las tablas que tengo en mi base de datos.MySQL auto-store datetime para cada fila

Cada vez que INSERT o UPDATE la base de datos, tendré que utilizar la palabra clave NOW(). Esto va por mi persistencia.

¿Existe alguna alternativa eficiente donde MySQL pueda almacenar automáticamente al menos el tiempo de datos de la fila que se inserta y me permita recuperarlo?

+0

Mi pobre gramática acecha en las profundidades oscuras de Stack Overflow. Gracias @Eric Leschinski. – mauris

Respuesta

60

Puede utilizar restricciones DEFAULT para establecer la fecha y hora:

ALTER TABLE 
MODIFY dt_created datetime DEFAULT CURRENT_TIMESTAMP 

ALTER TABLE 
MODIFY dt_modified datetime DEFAULT ON UPDATE CURRENT_TIMESTAMP 

Entonces no tendría que especificar NOW() en sus declaraciones INSERT/UPDATE.

Referencia: se le pidió TIMESTAMP properties

+0

ahh No sabía que puede usar algo como 'ON UPDATE CURRENT_TIMESTAMP' – mauris

+3

** Información adicional: ** Una columna TIMESTAMP en una tabla puede tener la marca de tiempo actual como el valor predeterminado para inicializar la columna, como la actualización automática valor, o ambos. No es posible que la marca de tiempo actual sea el valor predeterminado para una columna y el valor de actualización automática para otra columna. http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html – alditis

+5

'DEFAULT ON UPDATE CURRENT_TIMESTAMP' no es SQL válido.Debe ser 'dt_modified datetime ON UPDATE CURRENT_TIMESTAMP' o' dt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' Si aún reclama que es válido, entonces tal vez MySQL Workbench tenga un problema con él que debería mencionarse. –

1

pregunta similar aquí el campo de marca de tiempo "Timestamp for MySQL" se actualizará cada vez que se accede a ella. También puede considerar un Trigger colocado en la tabla en cuestión para rellenar automáticamente esos campos por usted. Dependiendo del entorno, a algunas tiendas/empresas no les gusta el uso de factores desencadenantes y, por lo tanto, es posible que tenga que buscar soluciones alternativas.

7
ALTER TABLE `tablename` CHANGE `dt` `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

debería ser el código correcto.

3

Bueno, no se puede tener ambas cosas:

mysql doc:

No es posible tener la fecha y hora actual sea el valor predeterminado para una columna y el valor de actualización automática para otra columna.

Triste, ¿no?

obstante, usted podría utilizar nulo en lugar de ahora() following this tip

8

Si está utilizando phpmyadmin usted puede hacer esto por:

enter image description here

0

En phpMyAdmin puede establecer enter image description here

O utiliza esta consulta

ALTER TABLE `tablename` 
    CHANGE `dt_created` `dt_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
Cuestiones relacionadas