Quantcast
Channel: Database – Linux Feed
Viewing all articles
Browse latest Browse all 26

MySql: tabelle con TIMESTAMP multipli e CURRENT_TIMESTAMP()

$
0
0

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.


Viewing all articles
Browse latest Browse all 26