Cómo insertar automáticamente la fecha y hora en mysql

Para insertar automáticamente la fecha y la hora, es decir, el timestamp, en un campo de tipo TIMESTAMP en una tabla en MySQL podemos utilizar CURRENT_TIMESTAMP, siempre que estemos utilizando una versión de servidor Mysql superior a la 4.1. Si se utiliza el timestamp automático en las inserciones, cuando se omita el campo en una inserción, éste tomara el valor de fecha y hora que tenga el servidor en ese momento. Para esto se debe usar la propiedad DEFAULT CURRENT_TIMESTAMP en la creación del campo. Si se utiliza en las actualizaciones, cuando se produzca una sentencia UPDATE que omita el campo que tiene la propiedad en el timestamp, el campo tomará el valor actual de fecha y hora del servidor. Para esto se debe usar la propiedad ON UPDATE CURRENT_TIMESTAMP en la creación del campo. Se pueden usar por separado, o combinadas:

Tabla con un campo timestamp que toma un valor de fecha automático tanto en inserciones como actualizaciones
mysql> CREATE TABLE tabla_ejemplo1 (
fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP  
ON UPDATE CURRENT_TIMESTAMP
);
Query OK, 0 rows affected (0.09 sec)
Tabla con un campo timestamp que toma un valor de fecha automático tanto en inserciones pero NO en actualizaciones
mysql> CREATE TABLE tabla_ejemplo2 (
fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Query OK, 0 rows affected (0.03 sec)
Tabla con un campo timestamp que toma un valor de fecha automático en actualizaciones pero NO en inserciones
mysql> CREATE TABLE tabla_ejemplo3 (
fecha TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Query OK, 0 rows affected (0.02 sec)
Ejemplo de inserción en una tabla con un campo DEFAULT CURRENT_TIMESTAMP
mysql> INSERT INTO tabla_ejemplo2 VALUES();
Query OK, 1 row affected (0.02 sec)
mysql> SELECT * FROM tabla_ejemplo2;
+---------------------+
| fecha               |
+---------------------+
| 2008-05-31 20:06:50 |
+---------------------+
1 row in set (0.00 sec)
Ejemplo de actualización de un campo con la propiedad ON UPDATE CURRENT_TIMESTAMP
mysql> INSERT INTO tabla_ejemplo3 VALUES();
Query OK, 1 row affected (0.03 sec)
mysql> ALTER TABLE tabla_ejemplo3 ADD COLUMN descripcion VARCHAR(20);
Query OK, 1 row affected (0.13 sec)
mysql> UPDATE tabla_ejemplo3 SET descripcion = 'descripcion';
Query OK, 1 row affected (0.02 sec)
mysql> SELECT * FROM tabla_ejemplo3;
+---------------------+-------------+
| fecha               | descripcion |
+---------------------+-------------+
| 2008-05-31 20:00:00 | descripcion |
+---------------------+-------------+
1 row in set (0.00 sec)

Este sistema tiene la limitación de que solamente puede haber un campo DEFAULT CURRENT_TIMESTAMP por cada tabla, si intentamos crear dos, nos devolverá el siguiente error:

mysql> CREATE TABLE tabla_ejemplo4 (
    -> descripcion VARCHAR(30),
    -> fecha_uno TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    -> fecha_dos TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP
column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

Las columnas con la propiedad ON UPDATE CURRENT_TIMESTAMP están sujetas a la misma limitación.

También estamos limitados en el orden en el que creamos las columnas de tipo TIMESTAMP, la única columna que puede utilizar la propiedad CURRENT_TIMESTAMP es la primera en el orden de declaración, a no ser que le indiquemos un valor por defecto a la primera columna TIMESTAMP, ejemplo:

mysql> CREATE TABLE tabla_ejemplo4 (
    -> descripcion VARCHAR(30),
    -> fecha_uno TIMESTAMP,
    -> fecha_dos TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP
column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
mysql> CREATE TABLE tabla_ejemplo4 (
    -> descripcion VARCHAR(30),
    -> fecha_uno TIMESTAMP DEFAULT 0,
    -> fecha_dos TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.03 sec)

Se puede utilizar cualquiera de estas opciones en lugar de CURRENT_TIMESTAMP: CURRENT_TIMESTAMP(), NOW(), LOCALTIME, LOCALTIME(), LOCALTIMESTAMP, o LOCALTIMESTAMP().

mysql> CREATE TABLE tabla_ejemplo5 (
    -> descripcion VARCHAR(30),
    -> fecha_uno TIMESTAMP DEFAULT NOW());
Query OK, 0 rows affected (0.03 sec)
mysql> CREATE TABLE tabla_ejemplo6 (
    -> descripcion VARCHAR(30),
    -> fecha_uno TIMESTAMP DEFAULT LOCALTIME);
Query OK, 0 rows affected (0.03 sec)

Nota: No se puede utilizar DEFAULT CURRENT_TIMESTAMP en la declaración de una columna de la tabla y ON UPDATE CURRENT_TIMESTAMP en otra columna diferente, si lo hacemos, nos devolverá un error de definición de tabla incorrecta.

mysql> CREATE TABLE dif_columnas (
    -> creado TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    -> actualizado TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    -> datos CHAR(20));
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP
column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

Comentarios

[...] No traspasa las definiciones de DEFAULT CURRENT_TIMESTAMP [...]

Muchas gracias hacía tiempo que andaba buscando esto, sé que era posible pero no daba con el comando exacto ;)
Gracies!

No hay de qué, me alegro que te haya sido de utilidad :)

es muy util la informacion, tengo una duda con respecto a eso ya que estoy creando un sistema que manejara la hora y fecha del sistema pero lo hara por medio de procesos por ejemplo cuando se de alta a un folio genera una hora, cuando ese folio pase a otro departamento genera otra hora y fecha pero tienen que estar lamacenados las dos. mi duda es si se puede en una sola talba otengo que crear una para cada proceso.

Puedes crear varios campos diferentes dentro de la misma tabla para guardar las distintas horas de creacion y modificacion, lo que no puedes hacer es que mas de uno de estos campos tenga la propiedad de generar autonumericos de forma automática, tendrías que crear uno de los campos como DEFAULT CURRENT_TIMESTAMP y el resto de los campos de fecha insertarlos utilizando NOW o CURRENT_TIMESTAMP como valores de inserción o actualización.

GRACIAS, me dieron una mano que hace ratao andaba buscando. Ja ya esta funcionando. GRACIAS NUEVAMENTE

Me alegro que el artículo te haya sido de utilidad Fernando!
Un saludo

[...] Cómo insertar automáticamente la fecha y hora en mysql (3.070 visitas) [...]

graaaaaaaaaaaaacias!!!!!!!!!!!!

soy vastante nuebo en esto y tengo un problema con las
fechas (yyyy-m-d) las cuales pueden ser modificadas ya que son pedidos antisipados el problema me surge cuando hago el UPDATE no me la toma como fecha la BD; el dato es de tipo DATE y no e encontrado alguna funcion que convierta CHAR a DATE
desde ya gracias

en este caso, tu mismo debes dar el formato a la fecha que pasarás como una cadena CHAR, si tiene el formato correcto, la BD lo convierte a fecha....

es mejor usar el formato ansi "9999-88-77", y eso tambien depende del lenguaje con el que estes programando

si es en PHP, asegurate de que el mes y el dia tengan siempre dos digitos

si es VB, entonces la conversion de un campo date puede ser automatica si lo asignas al campo en el recordset. Ej: rec("fecha") = date()

como se ingreso desde php la mediante un formulario la fecha automaticamente

Hola Pedro !!

soy nuevo en esto de Php y MySql espero me puedas ayudar tengo 2 campos tipo time (entrada y salida), como puedo saber el tiempo transcurido ?

hola =)
Una pregunta: estoy usando php a travez de formulario para ingresar datos en las bases de datos, mi pregunta es como hago para que al guardar los datos automaticamente se guarde la hora y fecha?
Ejemplo:
intro duzco los datos: karina, duarte, femenino
y la tabla quedaria asi:
Nombre Apellido Sexo
karina duarte Femenino
quiero que la tabla tenga otra columna "Fecha-hora" (que guarde la fecha y la hora (acutal) justo en el momento de guardar los datos) para luego ser mostrados.
el TIMESTAMP me sirve para eso? soy nueva en esto, agradecere cualquier ayuda. cualquier cosa este es mi correo karinaduarte17@yahoo.com

Gracias Pedro... andaba buscando como hacerlo. se copia las funciones de esta web, y se pega en phpadmin y despues se pasa a sentencia php y se hace facil..
Hojala que le sirva a las persona que quieran aprender php con mysql

EXCELENTE!!! gracias justo la solucion que buscaba!!! Agradecido en gran manera.

GRACIASSSSSSS en serio de nuevo GRACIAASSSSSS

Puedo usar un registro tipo date (yyyy-mm-dd) pero que se actualice automaticamente con el sistema? por ejemplo si voy a cobrar algo que me registre la fecha actual cuando se cobro

Gracias

Cómo insertar automáticamente la fecha y hora en mysql

yo necesito insertar automáticamente nada mas LA FECHA!!
de qué tipo tendría q definir el campo?
TIPO: TIME_sTAMP Y Default: CURRENT_date

por favor ayuda!! gracias!

Bueno desde PHP tendrias que insertar date('Y-m-d') en un capo MYSQL tipo DATE
e inserteas la fecha, para insertar la fecha y hora podrias usar em MYSQL el campo DATETIME

hola pues nada sirve mano

gracias por tu explicacion me sirvio de mucho.

Muchas gracias, esto me servira de ayuda para un sistema que estoy realizando.

Muy Bueno el posto, pero yo queria uno del cual yo doy la fecha y la hora en un formato y que se cambie al formato para ingresar a la bd. asi que lo modifique. con su permiso envio:
function ForFechaHora($fecha){
list($dia,$mes,$anio)=explode("/",$fecha);
list($anio,$hora)= explode(" ",$anio);
return $anio."-".$mes."-".$dia." ".$hora;
}
echo ForFechaHora('28/10/2011 03:32:13');
resultado.:
2011-10-28 03:32:13
jiji ahora si a registrarlo a la BD.

Hola compañeros ocupo un query mysql para insertar la hora en una campo de una tabla al actualizar otra Tabla, osea tengo una tabla que actualizo a cierta hora de la mañana de todos los dias y tengo otra tabla con un solo campo (fecha_actualizacion) como le hago para que con un query se actualize o se agrege la fecha de la ultima actualizacion de la BD actualizada diariamente.

muy bueno :)

es posible agregar solo la fecha y no la hora??

hay alguna forma de hacer que la fecha y hora se introduzcan automaticamente dependiendo del horario de zona en que se encuentren en el mundo

Saludos Pedro, muchas gracias, muy buena tu explicación, yo estoy creando campos adicionales en las tablas para algo sencillo de auditoria, es decir: fecha_creacion, creado_por, fecha_modificacion, modificado_por
Donde por su puesto tus consejos me han servido para lo de las fechas, pero quisiera saber como inserto automaticamente el nombre del usuario que creó y/o modifficó el registro en dichos campos, es posible?
Gracias de antemano.

Gracias me sirvio :)

tengo un error para insertarla fecha por favor si me pueden ayudar gracias

Existe alguna forma de solo agregar la hora en una columna y la fecha en otra columna, como atributos separados?

graciass, me sirvio para lo q necesitaba!

Muy buena informacion y pagina

Muy buena aportación, muchísimas gracias!

Hola, si me cambia la hora cada que hago una modificación pero en phpmyAdmin pero estoy trabajando con formularios con php y html y en esa pantalla al momento de hacer una modificación no la realiza, entonces quisiera saber como hacerle para que también muestre la hora cuando lo modifique desde html y no necesariamente desde la base.

Gracias y saludos!

9 años después me es de utilidad, muchas gracias.

para agregar esto a una tabla existente ...
ALTER TABLE `nombre de la tabla existente` ADD `tiempo` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `nombre de la tabla anterior ejemplo : insertar tiempo después de... apellidos `

Hola que tal, gracias por la aportación, al momento de hacer este campo de mi tabla timestamp toma la hora del servidor el cual está adelantado 6 horas a mi zona horaria, como podría arreglar eso y que la hora se guardará correctamente a mi zona horaria

Añadir nuevo comentario