2011-01-31 33 views
56

Chcę mieć jedną tabelę z dwoma kolumnami TIMESTAMP. Jedna kolumna do śledzenia, kiedy został utworzony rekord, a drugi do śledzenia, kiedy został zmodyfikowany. Chcę, aby te wartości były obsługiwane przez bazę danych. Nie chcę, aby moja warstwa aplikacji musiała o tym myśleć.Jedna tabela Mysql z wieloma kolumnami TIMESTAMP

Wiem, że jeśli masz kolumnę TIMESTAMP z DEFAULT CURRENT_TIMESTAMP lub ON UPDATE CURRENT_TIMESTAMP, nie możesz mieć kolejnej kolumny TIMESTAMP. Możesz użyć DATETIME, ale nie ma sposobu, aby to zrobić domyślnie, poza samym wyzwalaczem.

I stwierdziliśmy, że can have multiple TIMESTAMP columns pozostawiając każdy bez DEFAULT lub ON UPDATE i wstawienie NULL gdy rekord jest tworzony, powodując każdy mieć aktualny timestamp. Od tego momentu pierwsza kolumna zostanie automatycznie zaktualizowana.

To działa fantastycznie, ale pozostawia mnie z zabawnym uczuciem. Może to być błąd i może zostać naprawiony w dowolnym momencie. Jeśli tak ma działać, to niech tak będzie. Z radością pójdę dalej. Czy ktoś może mi powiedzieć, czy jest to najlepszy sposób, czy powinienem używać wyzwalaczy?

Odpowiedz

36

Jest udokumentowane w docs MySQL:

Ponadto można zainicjować lub zaktualizować dowolną kolumnę znacznik czasu do aktualnej daty i czasu, przypisując mu wartość NULL, chyba że został zdefiniowane z atrybutem NULL, aby zezwolić na wartości NULL.

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

+13

Dzięki MySQL 5.6.5 wiele znaczników czasu może być niezależnie kontrolowanych w jednej tabeli, więc reguły dla tego uległy zmianie. – TJChambers

3

MySQL pozwala na więcej niż jednej kolumny timestamp w tej samej tabeli, sprawdź ten przykład:

CREATE TABLE t1 ( ts1 TIMESTAMP DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t2 ( ts1 TIMESTAMP NULL, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t3 ( ts1 TIMESTAMP NULL DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

Zauważ, że kolumna ts1 TIMESTAMP jest DEFAULT o wartości 0, a ts2 TIMESTAMP kolumna jest DEFAULT o wartości CURRENT_TIMESTAMP. Więcej informacji tutaj: http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

Powiązane problemy