Pillole di MySQL: comportamento dei campi timestamp

Spread the love

mysqlNella dichiarazione di un campo di tipo timestamp viene per default abilitata la valorizzazione automatica all’istante corrente del campo quando inseriamo un nuovo record. Ad esempio, se in una tabella attivita abbiamo un campo data dichiarato come timestamp, quando inseriamo un nuovo record il campo verrà popolato anche senza la sua presenza esplicita nell’istruzione SQL. Supponiamo allora di avere questa tabella attivita così definita:

 

create table attivita1 (
   id int(10) auto_increment primary key,
   id_commessa int(10) not null,
   descrizione varchar(100) not null,
   data timestamp not null
);

Ora, se inserisco un record senza citare esplicitamente il campo data

insert into attivita (id_commessa, descrizione) values (123, 'Nuovo incarico');

nel campo data avrò il valore dell’istante in cui è stata eseguita l’istruzione (un po’ allo stesso modo con cui viene popolato un campo auto_increment).

Il problema (dal mio punto di vista per questa particolare applicazione) è che  lo stesso comportamento si verifica anche per un update:

update attività set id_commessa=321 where id=100

Anche il campo data, non esplicitamente citato nell’istruzione, cambierà. A volte ciò non è desiderabile. Per evitare questo comportamento dobbiamo modificare la tabella con una istruzione DDL:

ALTER TABLE attivita
CHANGE data 
data TIMESTAMP NOT NULL
DEFAULT CURRENT_TIMESTAMP

Così facendo non ho questo fastidioso (in questo caso) effetto collaterale.

Se non si dichiara esplicitamente il comportamento del default in fase di creazione, MySQL aggiungerà  automaticamente anche questa direttiva:

DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

che causerà il comportamento indesiderato durante l’aggiornamento.

 

 

Lascia un commento

Your email address will not be published.