2010-01-11 42 views
6

Estoy agregando una columna tsu (timestamp update) de tipo DATETIME a varias de mis tablas.Columna MySQL 'Update Timestamp' - Trigger

Necesito escribir BEFORE UPDATE activadores que actualizarán la columna a CURRENT_TIMESTAMP(), pero no puedo hacerlo bien. Intentó:

DELIMITER $$ 
CREATE 
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE 
    ON `cams`.`csi` 
    FOR EACH ROW BEGIN 
     UPDATE csi SET tsu = CURRENT_TIMESTAMP WHERE csi_code = OLD.csi_code; 
    END$$ 
DELIMITER ; 

¿Alguien puede señalarme en la dirección correcta pls? MTIA

+0

Probablemente debería mencionar en la pregunta que usted ya tiene una columna de tipo TIMESTAMP con un valor predeterminado de CURRENT_TIMESTAMP, para memorizar la hora de creación del registro. –

+0

Tienes razón Ian. No entendí las implicaciones de múltiples columnas TIMESTAMP antes. Gracias por tu ayuda. – maxhugen

Respuesta

14

bien, prueba este:

DELIMITER $$ CREATE 
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE 
    ON `cams`.`csi` 
     FOR EACH ROW BEGIN 
     SET NEW.tsu = CURRENT_TIMESTAMP; 
END$$ DELIMITER ; 
+0

¡Gracias, ese ejemplo es lo que necesitaba! Comprender TIMESTAMP mucho mejor ahora. – maxhugen

7

Si el campo se puede definir como una marca de tiempo, puede utilizar el siguiente:

ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
       ON UPDATE CURRENT_TIMESTAMP); 
+0

No, no puedo hacer eso, si conservo la columna 'ts' original: ' ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP' – maxhugen

1

No sabe si funcionará para usted, pero siempre se puede hacer Es un campo TIMESTAMP sin valor predeterminado: MySQL establecerá automáticamente el valor del primer campo definido en la tabla con la marca de tiempo actual en cada actualización.

+0

Gracias Zerofiz e Ian. Ya tengo una columna 'ts' que está configurada como predeterminada CURRENT_TIMESTAMP, ya que fue pensada para representar la" Fecha de creación ". Desde mi lectura en TIMESTAMP, no es posible usar CURRENT_TIMESTAMP como predeterminado en una columna ts y en la actualización en otra columna (que es exactamente lo que realmente quería, por supuesto). Estoy consultando con el cliente para ver si podemos utilizar el campo 'ts' existente como la" Fecha de actualización ", y prescindir de la" Fecha de creación ". – maxhugen

Cuestiones relacionadas