2011-01-31 20 views
56

Quiero tener una tabla con dos columnas TIMESTAMP. Una columna para realizar un seguimiento de cuándo se creó el registro y otra para realizar un seguimiento de cuándo se modificó. Quiero que estos valores sean manejados por la base de datos. No quiero que mi capa de aplicación tenga que pensarlo.One Mysql Table with Multiple TIMESTAMP Columns

sé que si usted tiene una columna con una TIMESTAMPDEFAULT CURRENT_TIMESTAMP o un ON UPDATE CURRENT_TIMESTAMP no se puede tener otra columna TIMESTAMP. Puede usar DATETIME, pero no hay forma de predeterminarlo, que yo sepa, fuera de un disparador.

He encontrado que can have multiple TIMESTAMP columns dejando cada uno sin DEFAULT o ON UPDATE e insertando NULL cuando se crea el registro, haciendo que cada uno tenga la fecha y hora actual. A partir de ese momento, la primera columna se actualizará automáticamente.

Esto funciona fantásticamente pero me deja con una sensación graciosa. Como este puede ser un error y podría ser parcheado en cualquier momento. Si esta es la forma en que se supone que debe funcionar, que así sea. Seguiré alegremente mi camino. ¿Alguien puede decirme si esta es la mejor manera de hacer esto o debería usar activadores?

Respuesta

36

Está documentado en la documentación de MySQL:

Además, puede inicializar o actualizar cualquier columna TIMESTAMP a la fecha actual y hora mediante la asignación de un valor NULL, a menos que haya sido definido con el atributo NULL para permitir valores NULL.

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

+13

Con MySQL 5.6.5 múltiples marcas de tiempo se pueden controlar de forma independiente en una tabla, por lo que las reglas para esto han cambiado. – TJChambers

3

MySQL permita que más de uno columnas TIMESTAMP en la misma tabla, comprobar este ejemplo:

CREATE TABLE t1 ( ts1 TIMESTAMP DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t2 ( ts1 TIMESTAMP NULL, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t3 ( ts1 TIMESTAMP NULL DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

Tenga en cuenta que la columna TS1 TIMESTAMP está predeterminado con el valor 0, y el La columna ts2 TIMESTAMP es DEFAULT con el valor CURRENT_TIMESTAMP. Más información aquí http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html