2010-01-11 12 views
6

Aggiungo una colonna tsu (aggiornamento data/ora) del tipo DATETIME a un certo numero di mie tabelle.Colonna 'Timestamp' di aggiornamento MySQL - Trigger

Ho bisogno di scrivere i trigger BEFORE UPDATE che aggiorneranno la colonna su CURRENT_TIMESTAMP(), ma non riesco a farlo bene. Provato:

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 ; 

Qualcuno può indicarmi la giusta direzione pls? MTIA

+0

Probabilmente si dovrebbe parlare nella domanda che si dispone già di una colonna di tipo TIMESTAMP il valore predefinito è CURRENT_TIMESTAMP, per memorizzare l'ora di creazione di record. –

+0

Hai ragione, Ian. Non ho capito le implicazioni di più colonne TIMESTAMP prima. Grazie per l'aiuto. – maxhugen

risposta

14

Va bene, provate questo:

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

Grazie, quell'esempio è quello di cui avevo bisogno! Comprendi TIMESTAMP molto meglio ora. – maxhugen

7

Se il campo può essere definito come un timestamp, è possibile utilizzare il seguente:

ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
       ON UPDATE CURRENT_TIMESTAMP); 
+0

No, non posso farlo, se tengo la colonna originale 'ts': ' ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP' – maxhugen

1

Non so se funzionerà per voi, ma si può sempre fare è un campo TIMESTAMP senza valore predefinito - MySQL imposterà automaticamente il valore del primo campo definito nella tabella con il timestamp corrente su ogni aggiornamento.

+0

Grazie a Zerofiz e Ian. Ho già una colonna 'ts' che è impostata su CURRENT_TIMESTAMP di default, in quanto era intesa a rappresentare la" Data di creazione ". Dalla mia lettura su TIMESTAMP, non è possibile utilizzare CURRENT_TIMESTAMP come predefinito sulla colonna one ts e sull'aggiornamento in un'altra colonna (che è esattamente ciò che volevo, ovviamente). Sto controllando con il cliente per vedere se siamo in grado di utilizzare l'esistente 'ts' campo come la "Data di aggiornamento", e fare a meno del "Data creazione". – maxhugen

Problemi correlati