2008-09-30 3 views
21

Ist es möglich, eine Zeitstempelspalte in einer MySQL-Tabelle zu definieren, die jedes Mal automatisch aktualisiert wird, wenn ein Feld in derselben Zeile geändert wird? Im Idealfall sollte diese Spalte auf den Zeitpunkt gesetzt werden, zu dem eine Zeile eingefügt wurde.mysql timestamp Spalte

Cheers, Don

Antwort

16

dass die Standard-Funktionalität des Spaltentyp timestamp ist. Beachten Sie jedoch, dass das Format dieses Typs yyyymmddhhmmss ist (alle Ziffern, keine Doppelpunkte oder andere Trennzeichen).

EDIT: Der obige Kommentar über das Format gilt nur für Versionen von MySQL < 4.1 ... Spätere Versionen formatieren wie ein Datetime

+3

Gemäß den MySQL 5.0-Dokumenten hat der Zeitstempeltyp dasselbe Format wie datetime (z. B. "JJJJ-MM-TT HH: MM: SS"). –

0

IIRC, die erste Spalte in einer Tabelle vom Typ Zeitstempel wird gesetzt, wenn ein Datensatz erstellt wird und nicht geändert werden kann. Die zweite Spalte vom Typ timestamp wird immer dann gesetzt, wenn ein Datensatz aktualisiert wird. Oder umgekehrt.

Ich habe nicht viel MySQL arbeiten, so dass Sie dies überprüfen möchten.

31

Sie können die Zeitstempelspalte auch für andere Poster verwenden. Hier ist die SQL können Sie die Spalte in hinzufügen verwenden:

ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ; 

Dies fügt eine Spalte namens ‚Lastupdated‘ mit einem Standardwert von der aktuellen Datum/Uhrzeit. Wenn dieser Datensatz aktualisiert wird (etwa 5 Minuten später), wird dieser Zeitstempel automatisch auf die aktuelle Zeit aktualisiert.

+6

Folgendes scheint ausreichend zu sein: ALTER TABLE 'table1' ADD' lastUpdated' TIMESTAMP; –

0

Ein MySQL-Zeitstempel wird nur dann mit einer Erstellungs- oder Aktualisierungszeit festgelegt, wenn als Standardwert der Standardwert festgelegt ist. ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP.
Ansonsten funktioniert es genau wie ein DateTime-Feld, nur dass es relativ zu 1970/01/01 UTC ist, also ist es ein absoluter Zeitpunkt unabhängig von einer bestimmten Zeitzone wie DateTime.

1

Dies ist, was ich beobachtet habe (MySql 5.7.11) -

Die erste TIMESTAMP-Spalte in der Tabelle aktuelle Zeitstempel als Standardwert bekommt. Wenn Sie also INSERT oder UPDATE ausführen, ohne einen Wert anzugeben, wird die Spalte den aktuellen Zeitstempel erhalten.

In nachfolgenden TIMESTAMP-Spalten sollte ein Standardwert explizit definiert sein. Wenn Sie über zwei TIMESTAMP-Spalten verfügen und wenn einen Standardwert für die zweite Spalte nicht angeben, wird diese Fehlermeldung Ihnen angezeigt, während Sie versuchen, die Tabelle zu erstellen

FEHLER 1067 (42000): ungültiger Standardwert für "COLUMN_NAME"