2009-05-03 12 views
34

Uso la data/ora su MySQL 5.x (con PHP) per ricordare i tempi degli eventi. Durante lo sviluppo ho dovuto aggiornare la tabella con una query che cambia qualcosa in tutte le colonne. Il timestamp è stato quindi ripristinato all'ora corrente.Timestamp MySQL solo su creazione

Come posso modificare la data/ora solo sugli inserti e non sugli aggiornamenti o sostituire?

+1

Una risposta tardiva per gli altri che possono Google questo: se si utilizza un TIMESTAMP quando si eseguono modifiche manuali nel database; oppure se hai più colonne TIMESTAMP e non vuoi toccarle tutte; il manuale MySQL dice di assegnare la colonna a se stessa. Si imposta esplicitamente la colonna sul suo valore corrente (ad esempio "updated_on = updated_on"), in modo che non venga modificata da UPDATE. –

risposta

65

Here's all you need to know. In breve, però, credo che questo dovrebbe farlo:

ALTER TABLE `mytable` 
CHANGE `mydatefield` `mydatefield` 
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
+0

Grazie! In qui la parte "NOT NULL" non è richiesta, penso. –

0

È possibile utilizzare un default value per quel campo e non includerlo nella domanda di inserimento o aggiornamento.

0
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

Molto buona documentazione qui for time-stamp.

+0

Potrei mancare qualcosa ma il mio tavolo è (ed è stato) definito in questo modo, ma le date sono cambiate. Da mysql spiega: 'pur_time', 'timestamp', 'NO', '', 'CURRENT_TIMESTAMP', '' – Nir

1

Suggerisco di utilizzare DATETIME per quella colonna. Non cambierà quando il record viene aggiornato.

Per me, utilizzo TIMESTAMP per il tracciamento quando il record è stato toccato l'ultima volta, anche se in generale evito di utilizzarlo.