Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/09/2010, 09:30
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 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