Funciones interesantes de TIMESTAMP

2 02 2010

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');
Vemos que con esa sintaxis del insert, los dos campos se rellenan automáticamente:
select * from ahora;
id texto fecha_actualización
1 Texto Modificado 2010-02-02 22:34:15
2 Otro texto 2010-02-02 22:34:15
3 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.

Advertisement

Acciones

Información

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.