2009-12-19 12 views
37

In MySQL, sono stufo di aggiungere le colonne dt_created e dt_modified (che sono ora di data e ora per la creazione e l'ultima modificata rispettivamente) per tutte le tabelle che ho nel mio database.MySQL auto-store datetime per ogni riga

Ogni volta che I INSERT o UPDATE il database, dovrò utilizzare la parola chiave NOW(). Questo sta andando oltre la mia persistenza.

Esiste un'alternativa efficiente in cui MySQL può memorizzare automaticamente almeno il datatime della riga inserita e consentirmi di recuperarlo?

+0

La mia scarsa grammatica si nasconde nelle profondità scure di Stack Overflow. Grazie @ Eric Leschinski. – mauris

risposta

60

È possibile utilizzare i vincoli predefinito per impostare il timestamp:

ALTER TABLE 
MODIFY dt_created datetime DEFAULT CURRENT_TIMESTAMP 

ALTER TABLE 
MODIFY dt_modified datetime DEFAULT ON UPDATE CURRENT_TIMESTAMP 

allora non sarebbe necessario specificare NOW() nelle istruzioni INSERT/UPDATE.

Riferimento: TIMESTAMP properties

+0

ahh non sapevo che si potesse usare qualcosa come "ON UPDATE CURRENT_TIMESTAMP' – mauris

+3

** Informazioni di ordine: ** Una colonna TIMESTAMP in una tabella può avere il timestamp corrente come valore predefinito per inizializzare la colonna, come l'aggiornamento automatico valore, o entrambi. Non è possibile che il timestamp corrente sia il valore predefinito per una colonna e il valore di aggiornamento automatico per un'altra colonna. http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html – alditis

+5

'DEFAULT ON UPDATE CURRENT_TIMESTAMP' non è SQL valido.Deve essere "dt_modified datetime ON UPDATE CURRENT_TIMESTAMP' o" dt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' Se ritieni che sia valido, allora forse MySQL Workbench ha un problema che dovrebbe essere menzionato. –

1

domanda simile è stato chiesto qui "Timestamp for MySQL" il campo timestamp verrà aggiornato ogni volta che vi si accede. Potresti anche considerare un Trigger inserito nella tabella in questione per popolare automaticamente questi campi. A seconda dell'ambiente, alcuni negozi/aziende non gradiscono l'uso di trigger e quindi potrebbe essere necessario trovare alternative di lavoro in giro.

7

dovrebbe essere il codice corretto.

3

Beh, non si può avere entrambe le cose:

mysql doc:

Non è possibile avere il timestamp corrente sia il valore predefinito per una colonna e il valore di aggiornamento automatico per un'altra colonna.

Triste, non è vero?

Si potrebbe comunque utilizzare null invece di ora() following this tip

8

Se stai usando phpmyadmin si può fare questo:

enter image description here

0

in phpMyAdmin è possibile impostare enter image description here

OR utilizzare questa query

ALTER TABLE `tablename` 
    CHANGE `dt_created` `dt_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
Problemi correlati