Mysql
 sql >> Database >  >> RDS >> Mysql

Quando viene aggiornato un timestamp (automatico)?

Dai il comando SHOW CREATE TABLE whatever

Quindi guarda la definizione della tabella .

Probabilmente ha una linea come questa

logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

dentro. DEFAULT CURRENT_TIMESTAMP significa che qualsiasi INSERT senza un'impostazione di timestamp esplicita utilizza l'ora corrente. Allo stesso modo, ON UPDATE CURRENT_TIMESTAMP significa che qualsiasi aggiornamento senza un timestamp esplicito comporta un aggiornamento al valore del timestamp corrente.

Puoi controllare questo comportamento predefinito durante la creazione della tabella.

Oppure, se la colonna timestamp non è stata creata correttamente in primo luogo, puoi cambiarla.

ALTER TABLE whatevertable
     CHANGE whatevercolumn 
            whatevercolumn TIMESTAMP NOT NULL
                           DEFAULT CURRENT_TIMESTAMP 
                           ON UPDATE CURRENT_TIMESTAMP;

Ciò farà sì che le operazioni INSERT e UPDATE sulla tabella aggiornino automaticamente la colonna timestamp. Se vuoi aggiornare whatevertable senza modificare il timestamp, ovvero

quindi devi emettere questo tipo di aggiornamento.

UPDATE whatevertable
   SET something = 'newvalue',
       whatevercolumn = whatevercolumn
 WHERE someindex = 'indexvalue'

Funziona con TIMESTAMP e DATETIME colonne. (Prima di MySQL versione 5.6.5 funzionava solo con TIMESTAMP s) Quando utilizzi TIMESTAMP s, i fusi orari vengono contabilizzati:su una macchina server correttamente configurata, quei valori vengono sempre archiviati in UTC e tradotti nell'ora locale al momento del recupero.