77 Stimmen

MySQL: Aktuelles Datum oder Zeit in Spalte schreiben

Tutorial von Stefan Trost | Letztes Update am 02.03.2023 | Erstellt am 04.12.2011

Häufig muss man das aktuelle Datum oder die aktuelle Zeit in eine MySQL Tabelle schreiben. Zum Beispiel wenn es darum geht, den letzten Login oder eine andere Zeit zu protokollieren.

Natürlich könnte man den Eintrag auch per PHP vorbereiten, aber MySQL stellt uns bereits einige nützliche und deutlich einfacher zu verwendende Funktionen zur Verfügung, die wir in diesem Zusammenhang verwenden können.

In diesem Artikel möchten wir uns dazu die folgenden Anwendungsbeispiele ansehen:

Datum mit Zeit eintragen

Wenn wir das Datum und die Zeit eintragen möchten, zum Beispiel in einer TIMESTAMP oder DATETIME Spalte, können wir einfach die Funktion NOW() verwenden. Zum Beispiel so:

UPDATE tabelle SET spalte_timestamp = NOW();

NOW() sorgt automatisch dafür, dass das aktuelle Datum mit der Zeit eingetragen wird, also zum Beispiel "2022-12-18 11:33:25".

Datum oder Zeit eintragen

Wenn wir nur das Datum oder nur die Zeit eintragen möchten, können wir dafür die Funktionen CURDATE() und CURTIME() verwenden. Hier ist eine Beispiel für die Verwendung beider Funktionen:

UPDATE tabelle SET spalte_nurdatum = CURDATE();
UPDATE tabelle SET spalte_nurzeit  = CURTIME();

CURDATE() würde zum Beispiel "2022-12-18" eintragen und CURTIME() zum Beispiel "11:33:25". Als Datentyp dieser beiden Spalte könnte man DATE oder TIME verwenden, die im Gegensatz zu TIMESTAMP und DATETIME nur den Datumsteil beziehungsweise den Zeitteil enthalten.

Datum und Zeit automatisch eintragen

In manchen Fällen geht es noch einfacher und wir können MySQL die komplette Arbeit überlassen. Zum Beispiel dann, wenn das aktuelle Datum und die aktuelle Zeit automatisch beim Erstellen eines neuen Datensatzes in eine Spalte eingetragen werden sollen. Das einzige was in diesem Fall zu tun ist, ist folgende Definition für die betreffende Spalte zu verwenden:

spalte_auto_create TIMESTAMP DEFAULT CURRENT_TIMESTAMP

Indem wir den Default-Wert einer TIMESTAMP-Spalte oder einer DATETIME-Spalte auf "CURRENT_TIMESTAMP" setzen, müssen wir uns nicht mehr um das manuelle Setzen des Timestamps kümmern. Jedes Mal wenn ein neuer Datensatz zur Tabelle hinzugefügt wird, erhält die betreffende Spalte den Wert des aktuellen Datums inklusive der aktuellen Zeit automatisch. Sinnvoll kann diese Funktion zum Beispiel bei Log-Einträgen oder für die Speicherung der Kommentare einer Kommentarfunktion sein, die mit dem aktuellen Datum protokolliert werden sollen.

Datum und Zeit automatisch updaten

MySQL bietet uns nicht nur die Möglichkeit an, das aktuelle Datum und die aktuelle Zeit automatisch beim Eintragen zu setzen, sondern auch beim Updaten eines Datensatzes. Auch in diesem Fall brauchen wir einfach nur die Spaltendefinition anpassen und haben dabei 2 Möglichkeiten:

spalte_auto_update TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

Mit dieser Spaltendefinition ist der Wert der Spalte beim Eintragen zunächst "0". Erst mit dem ersten Update wird der Wert der Spalte auf die aktuelle Zeit gesetzt.

Falls wir den Wert der Spalte schon beim Eintrag auf die aktuelle Zeit setzen möchten, können wir den DEFAULT-Wert von "0" einfach auf "CURRENT_TIMESTAMP" setzen und erhalten:

spalte_auto_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Mit dieser Spaltendefinition wird der Wert der Spalte direkt beim Erstellen auf das aktuelle Datum und die aktuelle Uhrzeit gesetzt. Mit jedem Update des Datensatzes wird der Wert aktualisiert und protokolliert so die letzte Änderung des Datensatzes. Nutzen könnte man diese Funktion zum Beispiel in einem Blog, in dem zu den Artikeln nicht nur das Erstelldatum sondern auch das letzte Änderungsdatum angezeigt werden soll, so wie es hier auch bei den Themen und Kommentaren auf AskingBox geschieht.

Vorsicht ist bei dieser Funktion allerdings geboten, wenn in dem Datensatz auch Daten enthalten sind, deren Update keine Aktualisierung der Zeit hervorrufen soll. Ein Beispiel wären die Klickzahlen einer Internetseite. Werden diese zusammen mit dem Text der Seite innerhalb eines Datensatzes gespeichert, möchte man sicherlich nicht, dass mit jedem Update der Klickzahl auch das Änderungsdatum des Datensatzes aktualisiert wird. In diesem Fall müssen wir dann auf die zuerst vorgestellte Funktion NOW() zurückgreifen und eine Aktualisierung manuell nur dann durchführen, wenn sie gewünscht ist.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.