Una función interesante del tipo de datos timestamp es la de utilizar la funcion CURRENT_TIMESTAMP() en los valores por defecto y/o en las actualizaciones. Vamos a ver un ejemplo:
Definimos la tabla:
create table ahora(
id int auto_increment primary key,
texto varchar(50),
fecha_actualizacion timestamp
default CURRENT_TIMESTAMP()
on update CURRENT_TIMESTAMP()
);
El campo id que lo rellene solo y la fecha_actualizacion, también:
insert into ahora(texto)
values ('Texto 1'),('Otro texto'),('Otro texto más');
select * from ahora;id texto fecha_actualización1 Texto Modificado 2010-02-02 22:34:152 Otro texto 2010-02-02 22:34:153 Otro texto más 2010-02-02 22:34:15
Si modificamos algún texto:
update ahora set texto="Texto Modificado" where id=1;
Se modifica automáticamente la fecha_actualizacion
Lo normal sería crear una vista que sólo permita al usuario acceso al texto (o a cualesquiera otros datos) sin tener acceso ni al id ni a la fecha_actualizacion
create view ahora_usuario as (select texto from ahora);
Se puede insertar y actualizar texto en la vista y queda reflejado en la fecha_actualizacion.
Un problema: Lo lógico sería en este tipo de tablas tener un campo de fecha_creación con un default CURRENT_TIMESTAMP() y un campo de fecha_actualización con un on update CURRENT_TIMESTAMP() pero mysql no permite poner más de una columna:
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
Soluciones: Utilizar disparadores, tanto para eso como para guardar un histórico de actualizaciones, pero ya no es tan inmediato como lo que hemos visto anteriormente.