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

Grundlegende Syntax und Funktionsweise der MySQL-Datenbank

Grundlegende Syntax der MySQL-Datenbank DDL-Opera...

Detaillierte Erklärung des Plattformbusses des Linux-Treibers

Inhaltsverzeichnis 1. Einführung in den Plattform...

js implementiert einen einfachen Countdown

In diesem Artikelbeispiel wird der spezifische Co...

Grundkenntnisse in HTML: ein erstes Verständnis von Webseiten

HTML ist die Abkürzung für Hypertext Markup Langua...

Was Sie beim Schreiben selbstschließender XHTML-Tags beachten sollten

Das img-Tag in XHTML sollte wie folgt geschrieben...

Warum sollten MySQL-Felder NOT NULL verwenden?

Ich habe vor Kurzem in einer neuen Firma angefang...

jQuery realisiert den Gleiteffekt des Dropdown-Menüs

Wenn wir eine Webseite erstellen, möchten wir man...

Installieren Sie mysql5.7.17 mit RPM unter Linux

Die Installationsmethode von MySQL5.7 rpm unter L...

Implementierungsprozessdatensatz für benutzerdefinierte Vue-Tabellenspalten

Inhaltsverzeichnis Vorwort Rendern setTable-Kompo...

Implementierung des gemeinsamen Grid-Layouts

Keine Lücken auf beiden Seiten, Lücken zwischen j...