Kiedy jest aktualizowany znacznik czasu (auto)?

Jeśli mam kolumnę w tabeli typu TIMESTAMP i domyślnie: CURRENT_TIMESTAMP czy ta kolumna zostanie zaktualizowana do bieżącego znacznika czasu, jeśli zaktualizuję wartość z dowolnej innej kolumny w tym samym wierszu?
Wydaje się, że tak nie jest, ale nie jestem pewien, czy tak powinno się stać.
Nie rozumiem co to znaczy ( z Dokumentacji MySQL):

Jeśli kolumna jest automatycznie aktualizowana, jest automatycznie aktualizowana do aktualny znacznik czasu, gdy wartość każdej innej kolumny w wierszu wynosi zmieniono jego aktualną wartość. Kolumna pozostaje bez zmian, jeśli wszystkie Pozostałe Kolumny są ustawiane na ich bieżące wartości. Aby zapobiec kolumnie od aktualizacji, gdy zmienią się inne kolumny, jawnie ustaw ją na jej aktualna wartość. Aby zaktualizować kolumnę nawet wtedy, gdy inne kolumny nie zmienić, jawnie ustawić go na wartość, którą powinien mieć]2

Author: Mike, 2013-09-23

5 answers

Podaj komendę SHOW CREATE TABLE whatever

Następnie spójrz na definicję tabeli.

Prawdopodobnie ma taką linię

logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

W nim. DEFAULT CURRENT_TIMESTAMP oznacza, że każda INSERT bez wyraźnego ustawienia znacznika czasu używa bieżącego czasu. Podobnie, ON UPDATE CURRENT_TIMESTAMP oznacza, że każda aktualizacja bez wyraźnego znacznika czasu powoduje aktualizację do bieżącej wartości znacznika czasu.

Możesz kontrolować to domyślne zachowanie podczas tworzenia tabeli.

Lub, jeśli kolumna znacznika czasu nie została utworzona prawidłowo w pierwszej kolejności, można go zmienić.

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

Spowoduje to, że operacje wstawiania i aktualizowania w tabeli będą automatycznie aktualizować kolumnę znacznika czasu. Jeśli chcesz zaktualizować whatevertable bez zmiany znacznika czasu, to znaczy

Aby zapobiec aktualizacji kolumny, gdy zmienią się inne kolumny

Następnie trzeba wydać tego rodzaju aktualizacji.

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

I działa to tylko z kolumnami TIMESTAMP, a nie z kolumnami DATETIME lub DATE. Ponieważ kolumny są TIMESTAMP s, strefy czasowe są rozliczane: na prawidłowo skonfigurowanej maszynie serwerowej wartości te są zawsze przechowywane w UTC i tłumaczone na czas lokalny po pobraniu.

 76
Author: O. Jones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-24 13:21:54

Myślę, że musisz zdefiniować kolumnę timestamp w ten sposób

CREATE TABLE t1 
(
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Zobacz tutaj

 9
Author: juergen d,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-23 15:13:03

Dodaj WYZWALACZ w bazie danych:

DELIMITER //
CREATE TRIGGER update_user_password 
  BEFORE UPDATE ON users
  FOR EACH ROW
    BEGIN
      IF OLD.password <> NEW.password THEN
        SET NEW.password_changed_on = NOW();
      END IF;
    END //
DELIMITER ;

Czas zmiany hasła zostanie zaktualizowany tylko wtedy, gdy kolumna hasła zostanie zmieniona.

 1
Author: Sibin John Mattappallil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 09:48:08

Dodawanie gdzie znaleźć UPDATE CURRENT_TIMESTAMP ponieważ dla nowych ludzi jest to zamieszanie.

Większość ludzi będzie używać phpmyadmin lub coś podobnego.

Wartość domyślna, którą wybierzesz CURRENT_TIMESTAMP

Atrybuty (inna lista rozwijana) wybieramy UPDATE CURRENT_TIMESTAMP

 0
Author: BrinkDaDrink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-05 19:58:27

Automatycznie aktualizowana kolumna jest automatycznie aktualizowana do bieżącego znacznika czasu, gdy wartość innej kolumny w wierszu zostanie zmieniona z bieżącej wartości. Automatycznie aktualizowana kolumna pozostaje bez zmian, jeśli wszystkie pozostałe kolumny są ustawione na ich bieżące wartości.

Aby to wyjaśnić wyobraźmy sobie, że masz tylko jeden wiersz:

-------------------------------
| price | updated_at          |
-------------------------------
|  2    | 2018-02-26 16:16:17 |
-------------------------------

Teraz, jeśli uruchomisz następującą kolumnę aktualizacji:

 update my_table
 set price = 2

Nie zmieni wartości updated_at, ponieważ wartość ceny nie została w rzeczywistości zmieniona (to był już 2).

Ale jeśli masz inny wiersz z wartością ceny inną niż 2, to wartość updated_at tego wiersza (z ceną 3) zostanie zaktualizowana do CURRENT_TIMESTAMP.

 -1
Author: Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-27 14:29:21