2011-06-09 12 views
6

Hola me gustaría configurar y olvidar dos campos para rastrear la fecha en que se agregó el registro y también la fecha en que se modificó por última vez el registro en una base de datos mySQL.¿Cuál es la mejor manera de configurar los campos de última modificación y registro de fecha?

Estoy usando "ON UPDATE CURRENT_TIMESTAMP" y esperaba cambiar simplemente UPDATE por INSERT.

Sin embargo, suerte. ¿Alguien puede darme la información sobre la mejor manera de lograr esto? preferiblemente dentro de la base de datos

Respuesta

0

mySQL tiene una función NOW() que puede usar, consulte el tutorial en Tutorials Point que puede ayudarlo a ponerlo en su lugar.

2

Básicamente necesita que ambas columnas se configuren como marcas de tiempo con valores predeterminados de CURRENT_TIMESTAMP. Por desgracia, esto no está permitido en MySQL:

Error Code: 1293 
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 

no se puede tener dos columnas de fecha y hora, a pesar de que necesita uno que sólo tienen un valor por defecto de CURRENT_TIMESTAMP, y el otro para ser UPDATE CURRENT_TIMESTAMP, esto sigue siendo No permitido.

Su mejor opción en este caso sería especificar como modo:

CREATE TABLE `test` (
`addedDate` dateTime, 
`lastModified` timestamp on update CURRENT_TIMESTAMP 
) 

Desafortunadamente, usted tiene que establecer la 'addedDate' manualmente en el inserto usando la función NOW().

+0

, gracias - eso es lo que pensaba. Sería bueno no tener que hacerlo. De todos modos, gracias por aclarar. – Chin

+0

Me alegro de que ayudó a aclarar. ¿Puedes marcar esto como la respuesta? – landoncz

0

Puede agregar una columna DATETIME y configurarla cuando crea la fila de datos. Eso servirá como la fecha en que se agregó el registro.

A continuación, añadir una columna TIMESTAMP:

Actualización automática de la primera columna TIMESTAMP en una tabla se produce bajo cualquiera de las siguientes condiciones:

  • se establece explícitamente la columna a NULL.

  • La columna no está especificada explícitamente en una instrucción INSERT o LOAD DATA INFILE.

  • La columna no se especifica explícitamente en una instrucción UPDATE y alguna otra columna cambia el valor. Una ACTUALIZACIÓN que establece una columna para el valor no causa que la columna TIMESTAMP se actualice; si configura una columna a su valor actual, MySQL ignora la actualización por eficiencia.

La columna TIMESTAMP se hará cargo de su registro de fecha de modificación.

9

Esto supone MySQL 5. Basta con añadir dos disparadores:

create table foo (a1 INT, created timestamp, updated timestamp) engine=innodb; 

DELIMITER | 

CREATE TRIGGER foo_created BEFORE INSERT ON foo 
FOR EACH ROW BEGIN 
SET new.created := now(); 
SET new.updated := now(); 
END; 

| 

CREATE TRIGGER foo_updated BEFORE UPDATE ON foo 
FOR EACH ROW BEGIN 
SET new.updated := now(); 
END; 
| 

DELIMITER  ; 

insert into foo (a1) values(7); 
select * from foo; 

update foo set a1=9; 
Cuestiones relacionadas