Domanda

È possibile definire una colonna timestamp in una tabella MySQL che verrà automaticamente aggiornata ogni volta che viene modificato un campo nella stessa riga? Idealmente, questa colonna dovrebbe essere inizialmente impostata al momento dell'inserimento di una riga.

Saluti, Don

È stato utile?

Soluzione

Questa è la funzionalità predefinita del timestamp tipo di colonna. Tuttavia, si noti che il formato di questo tipo è yyyymmddhhmmss (tutte le cifre, nessun punto e virgola o altra separazione).

EDIT: Il commento sopra sul formato è vero solo per le versioni di MySQL < 4.1 ... Le versioni successive la formattano come una DataTime

Altri suggerimenti

Puoi usare la colonna timestamp come altri poster menzionati. Ecco l'SQL che puoi usare per aggiungere la colonna in:

ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;

Questo aggiunge una colonna chiamata 'lastUpdated' con un valore predefinito della data / ora corrente. Quando quel record viene aggiornato (diciamo 5 minuti dopo), quella data verrà automaticamente aggiornata all'ora corrente.

Questo è quello che ho osservato (MySql 5.7.11) -

La prima colonna TIMESTAMP nella tabella ottiene il timestamp corrente come valore predefinito. Pertanto, se si esegue un INSERT o UPDATE senza fornire un valore, la colonna otterrà il timestamp corrente.

Ogni successiva colonna TIMESTAMP dovrebbe avere un valore predefinito esplicitamente definito. Se hai due colonne TIMESTAMP e se non specifichi un valore predefinito per la seconda colonna, otterrai questo errore durante il tentativo di creare la tabella -

ERRORE 1067 (42000): valore predefinito non valido per "COLUMN_NAME"

Un timestamp MySQL è impostato con il tempo di creazione o aggiornamento solo se il loro valore predefinito è impostato come tale. ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP.
Altrimenti funziona esattamente come un campo DateTime, solo che è relativo al UTC del 1970/01/01, quindi è un momento assoluto non dipendente da un fuso orario specifico come DateTime.

IIRC, la prima colonna in una tabella di tipo timestamp viene impostata quando viene creato un record e non può essere modificata. La seconda colonna di tipo timestamp viene impostata ogni volta che un record viene aggiornato. O viceversa.

Non ho svolto molto lavoro su MySQL, quindi ti consigliamo di verificarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top