Le date in MySQL

Data: 17 gennaio 2007Categoria: mysql

Quando si progetta un database è spesso utile, se non addirittura indispensabile, avere a disposizione sia la data di creazione che la data dell'ultima modifica di un record. Tali informazioni possono rivelarsi utili anche dopo che si è già impostato tutto e si sta procedendo allo sviluppo di un'applicazione. Magari all'inizio della progettazione si era esclusa la possibilità di aver bisogno di tali informazioni e poi, all'improvviso e con la tabelle già popolate da chissà quanti dati, ci accorgiamo che quelle date ci servono.

È bene quindi mettere sempre queste date, anche quando sembrano informazioni inutili, perché il loro inserimento e manutenzione ci comportano solo poco lavoro in più e ci mettono al riparo da bisogni (nostri o di un cliente) imprevisti.

Si prenda come esempio la tabella con la seguente struttura:

CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nome` varchar(255) NOT NULL default '',
  `inserimento` datetime NOT NULL default '0000-00-00 00:00:00',
  `ultimo` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
);

Nel campo inserimento verrà memorizzata la data della creazione del record mentre nel campo ultimo verrà memorizzata la data dell'ultima modifica fatta al record.

L'unica volta in cui dovremo preoccuparci delle date sarà al momento della creazione del record, quando verrà impostato il campo inserimento che poi rimarrà invariato per tutta la vita del record stesso. L'istruzione per la creazione di un record sarà:

INSERT INTO test (nome, inserimento)
VALUES ('pippo', NOW( ))";

Il valore NOW( ) restituisce la data e ora corrente.

Il campo ultimo verrà aggiornato automaticamente ogni volta che si farà un aggiornamento del record. Subito dopo la creazione del record i campi inserimento e ultimo saranno uguali, ma al prossimo aggiornamento del record non imposteremo niente per questi due campi:

UPDATE test 
SET nome='pluto' 
WHERE id=1;

Come risultato avremo che il campo inserimento rimarrà sempre lo stesso (come è giusto che sia) mentre ultimo sarà aggiornato alla data/ora in cui è stata impartita l'istruzione di UPDATE.

N.B.: le date nei campi di tipo datetime e timestamp hanno lo stesso formato, ovvero YYYY-MM-DD HH:mm:ss e potranno quindi essere facilmente manipolate con le stesse istruzioni/funzioni sia dal lato SQL sia dal lato del linguaggio di programmazione scelto.

Categorie

Archivi