Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Dos columnas TIMESTAMP a la vez?

Estas en el tema de Dos columnas TIMESTAMP a la vez? en el foro de Mysql en Foros del Web. Buenas! He exportado esto de un Access: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original CREATE TABLE `representacionsdates` (   `id _ representaciodata` INTEGER NOT NULL AUTO_INCREMENT ...
  #1 (permalink)  
Antiguo 17/09/2010, 08:41
 
Fecha de Ingreso: enero-2005
Mensajes: 170
Antigüedad: 19 años, 11 meses
Puntos: 0
Dos columnas TIMESTAMP a la vez?

Buenas! He exportado esto de un Access:

Código MySQL:
Ver original
  1. CREATE TABLE `representacionsdates` (
  2.   `id_representaciodata` INTEGER NOT NULL AUTO_INCREMENT,
  3.   `clau_representacio` INTEGER NOT NULL DEFAULT 0,
  4.   `data_representacio` DATETIME NOT NULL DEFAULT '=Now()',
  5.   `datareg` DATETIME DEFAULT '=Now()',
  6.   INDEX (`id_representaciodata`),
  7.   PRIMARY KEY (`id_representaciodata`)
  8. ) ENGINE=myisam DEFAULT CHARSET=utf8;

Y lo he traducido por:

Código MySQL:
Ver original
  1. CREATE TABLE `representacionsdates` (
  2.   `id_representaciodata` INTEGER NOT NULL AUTO_INCREMENT,
  3.   `clau_representacio` INTEGER NOT NULL DEFAULT 0,
  4.   `data_representacio` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  5.   INDEX (`id_representaciodata`),
  6.   PRIMARY KEY (`id_representaciodata`)
  7. ) ENGINE=myisam DEFAULT CHARSET=utf8;

Pero no puedo tener dos TIMESTAMP a la vez. Como lo soluciono? gracias
  #2 (permalink)  
Antiguo 17/09/2010, 08:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Dos columnas TIMESTAMP a la vez?

Podría ser con un trigger BEFORE INSERT.

En el body del trigger haces algo como:
Código SQL:
Ver original
  1. NEW.data_representacio = CURRENT_TIMESTAMP();
  2. NEW.datareg = CURRENT_TIMESTAMP();

No lo he probado, pero creo que esto te funciona.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 17/09/2010, 08:48
 
Fecha de Ingreso: enero-2005
Mensajes: 170
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Dos columnas TIMESTAMP a la vez?

Gracias pero me vas a perdonar porque no lo entiendo. Soy bastante novato en esto del SQL, y no sé lo que es un trigger ni como funciona!
  #4 (permalink)  
Antiguo 17/09/2010, 08:50
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Dos columnas TIMESTAMP a la vez?

Que se note un poco tu interes en aprender
http://www.google.com.co/search?aq=f...ggers+en+mysql

trata de montarlo y si tienes problemas, vuelve con dudas concretas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 17/09/2010, 09:00
 
Fecha de Ingreso: enero-2005
Mensajes: 170
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Dos columnas TIMESTAMP a la vez?

Vale, lo entiendo. Son unos disparadores que actuaron en funcion del tipo de triger y de sus condiciones.
Lo he probado ANTES del CREATE TABLE tal que asi:

Código MySQL:
Ver original
  1. CREATE TRIGGER data_dup BEFORE INSERT ON representacionsdates
  2. NEW.data_representacio = CURRENT_TIMESTAMP();
  3. NEW.datareg = CURRENT_TIMESTAMP();


Pero me da error de sintaxis en la linea 2.

Gracias!
  #6 (permalink)  
Antiguo 17/09/2010, 09:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Dos columnas TIMESTAMP a la vez?

Acabo de descubrir algo curioso. Cuando se tienen dos campos timestamp en una tabla, el valor NULL nunca es una opción, así que el primero creado automaticamente toma un valor por defecto current_timestamp y el otro un valor '0000-00-00 00:00:00'.

Entonces te propongo que crees la tabla así:
Código MySQL:
Ver original
  1. CREATE TABLE `representacionsdates` (
  2.   `id_representaciodata` INTEGER NOT NULL AUTO_INCREMENT,
  3.   `clau_representacio` INTEGER NOT NULL DEFAULT 0,
  4.   `data_representacio` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
  5.   `datareg` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
  6.   INDEX (`id_representaciodata`),
  7.   PRIMARY KEY (`id_representaciodata`)
  8. ) ENGINE=myisam DEFAULT CHARSET=utf8;

Con los dos valores por defecto en '0000-00-00 00:00:00' y ya con el trigger se modifiquen a current_timestamp.

El trigger sería así:
Código MySQL:
Ver original
  1. delimiter $$
  2. CREATE TRIGGER data_dup BEFORE INSERT ON representacionsdates
  3. IF NEW.data_representacio = '0000-00-00 00:00:00' THEN
  4.    SET NEW.data_representacio = CURRENT_TIMESTAMP();
  5. IF NEW.datareg = '0000-00-00 00:00:00' THEN
  6.    SET NEW.datareg = NOW();
  7. END$$
  8. delimiter ;

pruebas
Código MySQL:
Ver original
  1. mysql> CREATE TABLE `representacionsdates` (
  2.     ->   `id_representaciodata` INTEGER NOT NULL AUTO_INCREMENT,
  3.     ->   `clau_representacio` INTEGER NOT NULL DEFAULT 0,
  4.     ->   `data_representacio` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
  5.     ->   `datareg` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
  6.     ->   INDEX (`id_representaciodata`),
  7.     ->   PRIMARY KEY (`id_representaciodata`)
  8.     -> ) ENGINE=myisam DEFAULT CHARSET=utf8;
  9. Query OK, 0 rows affected (0.02 sec)
  10. mysql> delimiter $$
  11. mysql> CREATE TRIGGER data_dup BEFORE INSERT ON representacionsdates
  12.     -> FOR EACH ROW
  13.     -> BEGIN
  14.     -> IF NEW.data_representacio = '0000-00-00 00:00:00' THEN
  15.     ->    SET NEW.data_representacio = CURRENT_TIMESTAMP();
  16.     -> END IF;
  17.     -> IF NEW.datareg = '0000-00-00 00:00:00' THEN
  18.     ->    SET NEW.datareg = NOW();
  19.     -> END IF;
  20.     -> END$$
  21. Query OK, 0 rows affected (0.02 sec)
  22.  
  23. mysql> delimiter ;
  24. mysql> INSERT INTO representacionsdates (clau_representacio) VALUES(5);
  25. Query OK, 1 row affected (0.00 sec)
  26.  
  27. mysql> SELECT *FROM representacionsdates;
  28. +----------------------+--------------------+---------------------+---------------------+
  29. | id_representaciodata | clau_representacio | data_representacio  | datareg             |
  30. +----------------------+--------------------+---------------------+---------------------+
  31. |                    1 |                  5 | 2010-09-17 10:32:19 | 2010-09-17 10:32:19 |
  32. +----------------------+--------------------+---------------------+---------------------+
  33. 1 row in set (0.00 sec)

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 17/09/2010, 09:57
 
Fecha de Ingreso: enero-2005
Mensajes: 170
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Dos columnas TIMESTAMP a la vez?

Muchas gracias, me ha ido genial.

Eres un crack!

Etiquetas: columnas, dos, timestamp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:14.