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
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.
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
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.
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
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.
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