Chociaż istnieje akceptowana odpowiedź, nie uważam, że jest ona właściwa. Jest to najprostszy sposób na osiągnięcie tego, co jest potrzebne, ale nawet jeśli jest już włączony w InnoDB (w rzeczywistości dokumenty mówią, że nadal powinieneś uzyskać NULL ...), jeśli czytasz dokumenty MySQL , nawet w aktualnej wersji (8.0) używając UPDATE_TIME jest niewłaściwa opcja, ponieważ:
Sygnatury czasowe nie są utrwalane po ponownym uruchomieniu serwera lub po usunięciu tabeli z pamięci podręcznej słownika danych InnoDB.
Jeśli dobrze rozumiem (nie mogę tego teraz zweryfikować na serwerze), znacznik czasu zostanie zresetowany po ponownym uruchomieniu serwera.
Jak dla prawdziwych (i dobrze, kosztownych) rozwiązań, masz Bill Karwin za rozwiązanie z CURRENT_TIMESTAMP i chciałbym zaproponować inny, który jest oparty na wyzwalaczy (używam tego jednego).
Zaczynasz od stworzenia oddzielnej tabeli (a może masz jakąś inną tabelę, która może być użyta do tego celu), która będzie działać jak magazyn dla zmiennych globalnych (tutaj znaczniki czasu). Musisz przechowywać dwa pola - nazwę tabeli (lub jakąkolwiek wartość, którą chcesz tutaj zachować jako identyfikator tabeli) i znacznik czasu. Gdy już to zrobisz, powinieneś zainicjować go z tym id tabeli + data początkowa (NOW () to dobry wybór :)).
Teraz przechodzisz do tabel, które chcesz obserwować, i dodajesz wyzwalacze PO WSTAWIENIU / AKTUALIZACJI / USUNIĘCIU za pomocą tej lub podobnej procedury:
CREATE PROCEDURE `timestamp_update` ()
BEGIN
UPDATE `SCHEMA_NAME`.`TIMESTAMPS_TABLE_NAME`
SET `timestamp_column`=DATE_FORMAT(NOW(), '%Y-%m-%d %T')
WHERE `table_name_column`='TABLE_NAME';
END