In ogni database che si rispetti c’è sempre un timestamp da inizializzare con CURRENT_TIMESTAMP. Se state leggendo questo articolo e siete riusciti a non farvi esplodere il cervello leggendo il titolo, immagino che sappiate cosa è un timestamp e cosa significhi CURRENT_TIMESTAMP, quindi passo subito al sodo.
MySql non permette di avere nella stessa tabelle 2 o più campi di tipo TIMESTAMP che utilizzino la funzione CURRENT_TIMESTAMP(). Il motivo lo ignoro completamente ma di seguito vi mostro un “workaround” che permetta di aggirare il problema con una soluzione discretamente elegante (sono fiero di me stesso…)
Per aggirare il problema useremo i TRIGGER, leggetevi la documentazione per approfondire (CREATE TRIGGER Syntax), in poche parole i trigger vi consentono di eseguire dei pezzi di codice prima e/o dopo una insert o un update su una tabella. A questo punto la soluzione si comincia già ad intravedere, infatti andremo ad utilizzare proprio questi trigger, eseguiti prima di un update per impostare i timestamp che ci occorrono con la funzione CURRENT_TIMESTAMP(). Ecco il codice:
DROP TRIGGER IF EXISTS `set_timestamp`// CREATE TRIGGER `set_timestamp` BEFORE UPDATE ON `nome_tabella` FOR EACH ROW BEGIN IF NEW.primo_campo=1 THEN SET NEW.primo_campo_timestamp=CURRENT_TIMESTAMP(); END IF; IF NEW.secondo_campo=1 THEN SET NEW.secondo_campo_timestamp=CURRENT_TIMESTAMP(); END IF; END //
Come potete notare nel body del trigger, ho anche associato l’aggiornamento del campo “primo_campo_timestamp” ad un flag presente nella tabella: “primo_campo”. Poi sta a voi adattare questa tecnica al vostro database.