Verwendung des MySQL-Zeitstempels

Verwendung des MySQL-Zeitstempels

Vorwort:

Zeitstempelfelder werden häufig in MySQL verwendet. Wenn wir beispielsweise den Zeitpunkt aufzeichnen müssen, zu dem eine Datenzeile erstellt oder geändert wird, verwenden wir normalerweise das Zeitstempelfeld. In diesem Artikel werden hauptsächlich die Verwendung und die zugehörigen Parameter des Zeitstempelfelds vorgestellt. Ich hoffe, dass Sie nach der Lektüre ein tieferes Verständnis des Zeitstempels haben.

1. Einführung in den TIMESTAMP-Feldtyp

Der Zeitstempelfeldtyp kann Zeittypdaten speichern. Der Zeitbereich, den der Zeitstempel speichern kann, ist: „1970-01-01 00:00:01.000000“ bis „2038-01-19 03:14:07.999999“. Das Zeitstempelfeld belegt 4 Bytes. In MySQL 5.7 kann der Zeitstempel eine Genauigkeit angeben, d. h. fsp in TIMESTAMP(fsp) kann einen optionalen Wert zwischen 0 und 6 angeben, um die Genauigkeit auf Sekundenbruchteile darzustellen. Der Wert 0 bedeutet, dass kein Dezimalteil vorhanden ist. Wird dieser Wert weggelassen, beträgt die Standardgenauigkeit 0.

Machen wir einen einfachen Test:

# Zeitstempel kann Präzision angebenmysql> CREATE TABLE `stu_tb` (
  -> `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel automatisch inkrementieren',
  -> `stu_id` int(11) NOT NULL COMMENT 'Matrikelnummer',
  -> `stu_name` varchar(20) DEFAULT NULL COMMENT 'Studentenname',
  -> `create_time` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP KOMMENTAR 'Erstellungszeit',
  -> `update_time` timestamp(2) NICHT NULL STANDARD CURRENT_TIMESTAMP(2) BEIM UPDATE CURRENT_TIMESTAMP(2) KOMMENTAR 'Änderungszeit',
  -> PRIMÄRSCHLÜSSEL (`id`)
  ->) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Abfrage OK, 0 Zeilen betroffen (0,04 Sek.)
mysql> zeigen erstellen Tabelle stu_tb\G
*************************** 1. Reihe ***************************
    Tabelle: stu_tb
Tabelle erstellen: CREATE TABLE `stu_tb` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel automatisch inkrementieren',
 `stu_id` int(11) NOT NULL KOMMENTAR 'Studenten-ID',
 `stu_name` varchar(20) DEFAULT NULL COMMENT 'Studentenname',
 `create_time` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP KOMMENTAR 'Erstellungszeit',
 `update_time` timestamp(2) NOT NULL DEFAULT CURRENT_TIMESTAMP(2) ON UPDATE CURRENT_TIMESTAMP(2) COMMENT 'Änderungszeitpunkt',
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB STANDARD-CHARSET=utf8
1 Zeile im Satz (0,00 Sek.)
mysql> in stu_tb (stu_id, stu_name) Werte einfügen (1001, 'dfdfa');
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
mysql> wähle * aus stu_tb;
+----+--------+----------+---------------------+------------------------+
| ID | Stu-ID | Stu-Name | Erstellungszeit | Aktualisierungszeit |
+----+--------+----------+---------------------+------------------------+
| 1 | 1001 | dfdfa | 07.01.2020 17:33:51 | 07.01.2020 17:33:51.63 |
+----+--------+----------+---------------------+------------------------+
1 Zeile im Satz (0,00 Sek.)

2. Parameter, die Zeitstempel beeinflussen

Es gibt zwei Hauptparameter, die die Anzeige von Zeitstempeln beeinflussen, nämlich explicit_defaults_for_timestamp und time_zone. Im Folgenden wird kurz die Auswirkung dieser beiden Parameter auf Zeitstempel vorgestellt.

Der Parameter explicit_defaults_for_timestamp bestimmt, wie der MySQL-Server Standardwerte und NULL-Werte in Zeitstempelspalten behandelt. Diese Variable wurde seit MySQL 5.6.6 eingeführt. Sie ist in globale Ebene und Sitzungsebene unterteilt. Sie kann dynamisch aktualisiert werden. Der Standardwert ist OFF. Weitere Informationen zu diesem Parameter finden Sie in diesem Artikel.

Wenn der Parameter explicit_defaults_for_timestamp standardmäßig auf OFF gesetzt ist, ist das Verhalten wie folgt:

  • Wenn die Zeitstempelspalte das Nullattribut nicht explizit angibt, wird die Spalte standardmäßig automatisch mit dem Nicht-Null-Attribut hinzugefügt (andere Spaltentypen, die Nicht-Null nicht explizit angeben, lassen Nullwerte zu). Wenn in diese Spalte ein Nullwert eingefügt wird, wird der Spaltenwert automatisch auf den aktuellen Zeitstempelwert gesetzt.
  • Die erste Zeitstempelspalte in der Tabelle, wenn das Nullattribut nicht angegeben ist oder kein Standardwert angegeben ist und keine ON UPDATE-Klausel angegeben ist. Dann wird die Spalte automatisch mit den Attributen DEFAULT CURRENT_TIMESTAMP und ON UPDATE CURRENT_TIMESTAMP hinzugefügt.
  • Für andere TIMESTAMP-Spalten werden die NULL- und DEFAULT-Attribute automatisch auf NOT NULL DEFAULT '0000-00-00 00:00:00' gesetzt, sofern sie nicht explizit angegeben sind. (Dies hängt natürlich mit SQL_MODE zusammen. Wenn SQL_MODE „NO_ZERO_DATE“ enthält, ist es eigentlich nicht zulässig, seinen Standardwert auf „0000-00-00 00:00:00“ festzulegen.)

Wenn der Parameter explicit_defaults_for_timestamp auf ON gesetzt ist, ist das Verhalten wie folgt:

  • Wenn die Zeitstempelspalte kein explizites Nicht-Null-Attribut hat, kann die Spalte standardmäßig null sein. In diesem Fall wird beim Einfügen eines Nullwerts in die Spalte direkt null anstelle des aktuellen Zeitstempels aufgezeichnet.
  • Die Attribute DEFAULT CURRENT_TIMESTAMP und ON UPDATE CURRENT_TIMESTAMP werden nicht automatisch zur ersten Zeitstempelspalte in der Tabelle hinzugefügt.
  • Wenn die Zeitstempelspalte mit dem Attribut „nicht null“ hinzugefügt wird und kein Standardwert angegeben ist. Wenn zu diesem Zeitpunkt ein Datensatz in die Tabelle eingefügt wird, aber kein Wert für die Spalte TIMESTAMP angegeben ist, wird direkt ein Fehler gemeldet, wenn der strikte SQL-Modus angegeben ist. Wenn der strikte SQL-Modus nicht angegeben ist, wird „0000-00-00 00:00:00“ in die Spalte eingefügt und eine Warnung generiert.

Der Parameter time_zone gibt die Zeitzone der Datenbank an. Die Zeitzone ist in globale Ebene und Sitzungsebene unterteilt. Sie kann dynamisch aktualisiert werden. Der Standardwert ist SYSTEM, was bedeutet, dass die Zeitzone des Datenbankdienstes mit der Zeitzone des Systems übereinstimmt. Wenn MySQL Zeitstempel speichert, ist die tatsächlich in der Datenbank gespeicherte Zeit die UTC-Zeit. Beim Abfragen und Anzeigen werden je nach spezifischer Zeitzone unterschiedliche Zeiten angezeigt. Sie können default_time_zone in die Konfigurationsdatei schreiben, um die Zeitzone anzugeben. Um beispielsweise die chinesische Zeitzone 8 anzugeben, können Sie schreiben: default_time_zone='+8:00'. Nachfolgend sehen Sie eine einfache Demonstration der Zeitanzeige in verschiedenen Zeitzonen:

# Anfängliche Standardwertemysql> zeigt Variablen wie „%time_zone%“ an;
+------------------+--------+
| Variablenname | Wert |
+------------------+--------+
| Systemzeitzone | CST |
| Zeitzone | SYSTEM |
+------------------+--------+
2 Zeilen im Satz (0,00 Sek.)
mysql> wähle * aus testdb.stu_tb;
+----+--------+----------+---------------------+------------------------+
| ID | Stu-ID | Stu-Name | Erstellungszeit | Aktualisierungszeit |
+----+--------+----------+---------------------+------------------------+
| 1 | 1001 | dfdfa | 07.01.2020 17:33:51 | 07.01.2020 17:33:51.63 |
+----+--------+----------+---------------------+------------------------+
1 Zeile im Satz (0,00 Sek.)
# Wechseln Sie zur UTC-Zeitzone und stellen Sie die Verbindung erneut her, um festzustellen, dass sich die im Zeitstempel gespeicherte Zeit geändert hat mysql> set global time_zone='+0:00';
mysql> Variablen wie „%time_zone%“ anzeigen;
+------------------+--------+
| Variablenname | Wert |
+------------------+--------+
| Systemzeitzone | CST |
| Zeitzone | +00:00 |
+------------------+--------+
2 Zeilen im Satz (0,01 Sek.)
mysql> wähle * aus testdb.stu_tb;
+----+--------+----------+---------------------+------------------------+
| ID | Stu-ID | Stu-Name | Erstellungszeit | Aktualisierungszeit |
+----+--------+----------+---------------------+------------------------+
| 1 | 1001 | dfdfa | 07.01.2020 09:33:51 | 07.01.2020 09:33:51.63 |
+----+--------+----------+---------------------+------------------------+
1 Zeile im Satz (0,00 Sek.)

3. Best Practices für die Verwendung von TIMESTAMP

Es gibt viele Variationen von TIMESTAMP. Im Folgenden sind einige der am häufigsten verwendeten aufgeführt:

  • ZEITSTEMPEL STANDARD CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP

Diese Datenspalte wird beim Erstellen neuer Datensätze und beim Ändern vorhandener Datensätze aktualisiert.

  • ZEITSTEMPEL STANDARD AKTUELLER ZEITSTEMPEL

Setzen Sie dieses Feld beim Erstellen eines neuen Datensatzes auf die aktuelle Zeit, aktualisieren Sie es jedoch nicht, wenn Sie es später ändern.

  • ZEITSTEMPEL BEIM UPDATE CURRENT_TIMESTAMP

Setzen Sie dieses Feld auf 0, wenn Sie einen neuen Datensatz erstellen, und aktualisieren Sie es, wenn Sie ihn später ändern.

  • TIMESTAMP DEFAULT 'yyyy-mm-dd hh:mm:ss' BEI UPDATE CURRENT_TIMESTAMP

Setzen Sie dieses Feld beim Erstellen eines neuen Datensatzes auf den angegebenen Wert und aktualisieren Sie es, wenn Sie es später ändern.

In der Praxis empfiehlt es sich, die Tabelle folgendermaßen zu erstellen:

CREATE TABLE `Tabellenname` (
 `increment_id` INT UNSIGNED NOT NULL auto_increment COMMENT 'Primärschlüssel automatisch inkrementieren',
 ...
 `create_time` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP KOMMENTAR 'Erstellungszeit',
 `update_time` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP KOMMENTAR 'Änderungszeit',
 PRIMÄRSCHLÜSSEL (`increment_id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

Das heißt, jede Datenzeile enthält die Erstellungszeit und die Änderungszeit. Das Programm muss beim Schreiben von Daten die angegebene Erstellungszeit und Änderungszeit nicht anzeigen, und der Standardwert wird automatisch ausgefüllt.

Hier sind einige Vorschläge und Erfahrungen zum Thema Zeitstempel, die Ihnen hoffentlich weiterhelfen:

Die Datentabelle verfügt über die Zeitstempelfelder „create_time“ und „update_time“ und es sind Standardwerte festgelegt.
Bei Zeitstempelfeldern wird empfohlen, beim Einfügen von Daten die Funktion now() nicht anzugeben oder einzufügen.
Es wird empfohlen, den Parameter explicit_defaults_for_timestamp standardmäßig auf OFF zu setzen.
Wenn die chinesische Zeit verwendet wird, wird empfohlen, die Zeitzone auf „+8:00“ einzustellen.
Es wird empfohlen, die Datenbank-Zeitzonen in verschiedenen Umgebungen konsistent zu halten und die Datenbank-Zeitzone nicht willkürlich zu ändern.
Achten Sie bei der Migration von Daten zwischen verschiedenen Instanzen darauf, ob die Zeitzonen identisch sind.
Es wird empfohlen, die Zeitzone in der JDBC-Verbindungszeichenfolge anzugeben und sie mit der Datenbank konsistent zu halten.

Zusammenfassen:

In diesem Artikel wird die Verwendung von Zeitstempeln ausführlich beschrieben. Außerdem stellen wir kurz mehrere Parameter vor, die sich auf den Zeitstempel auswirken. Ich hoffe, dass die Praktiken zur Verwendung von Zeitstempeln und die damit verbundenen Vorschläge für Sie hilfreich sind. Tatsächlich sind diese Inhalte in den offiziellen Dokumenten aufgezeichnet. Sie können die offiziellen Dokumente häufiger lesen.

PS: Ich habe in letzter Zeit einige Werbeartikel veröffentlicht, um meinen Lebensunterhalt zu verdienen. Ich hoffe, es macht Ihnen nichts aus. Nur wenn ich ein Einkommen habe, kann ich die Motivation aufbringen, weiter zu schreiben. Dieser öffentliche Account wird sich auch in Zukunft auf originale technische Artikel konzentrieren. Aufmerksame Leser werden feststellen, dass fast jeden Freitag technische Artikel veröffentlicht werden. Seien Sie versichert, dass die Artikel vom Freitag absolut nützlich sind. Vielen Dank für Ihre Unterstützung.

Oben finden Sie detaillierte Informationen zur Verwendung von MySQL-Zeitstempeln. Weitere Informationen zu MySQL-Zeitstempeln finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Mehrere Möglichkeiten zum Hinzufügen von Zeitstempeln in MySQL-Tabellen
  • Detaillierte Erklärung der TIMESTAMP-Verwendung in MySQL
  • Analyse eines Mordfalls aufgrund der Genauigkeit des MySQL-Zeitstempels
  • Probleme und Lösungen beim Überschreiben von MySQL-Dateneinfügungen und bei Zeitstempeln

<<:  Elementui exportiert Daten in XLSX- und Excel-Tabellen

>>:  Detaillierte Erläuterung des Implementierungsprozesses und der Verwendung des Linux-Papierkorbmechanismus

Artikel empfehlen

Detaillierte Erläuterung der gleichzeitigen Parameteranpassung von MySQL

Inhaltsverzeichnis Abfrage-Cache-Optimierung Über...

So implementieren Sie Dual-Machine-Master und Backup mit Nginx+Keepalived

Vorwort Lassen Sie mich zunächst Keepalived vorst...

So erstellen Sie Ihre erste React-Seite

Inhaltsverzeichnis Was ist Rract? Hintergrund Rea...

Lösung für das Problem der ungültigen Zeilenhöheneinstellung in CSS

Über die ungültige Zeilenhöheneinstellung in CSS ...

WeChat-Applet zum Speichern von Alben und Bildern in Alben

Ich entwickle derzeit eine Video- und Tool-App, ä...

mysql drei Tabellen verbunden, um eine Ansicht zu erstellen

Drei Tabellen sind miteinander verbunden. Feld a ...

CSS-Beispielcode mit Suchnavigationsleiste

Dieser Artikel zeigt Ihnen, wie Sie mit CSS eine ...

Detaillierte Schritte zur Dateisteuerungsverwaltung für Linux-Konten

Im Linux-System gibt es neben den verschiedenen, ...

Analyse des Linux-Hochleistungsnetzwerk-IO- und Reaktormodells

Inhaltsverzeichnis 1. Einführung in grundlegende ...

Erste Schritte Tutorial für Anfänger ④: So binden Sie Unterverzeichnisse

Um zu verstehen, was das bedeutet, müssen wir zunä...

Docker nginx implementiert einen Host zum Bereitstellen mehrerer Sites

Die virtuelle Maschine, die ich von einer bestimm...