Heim  >  Artikel  >  Datenbank  >  So lösen Sie das Problem der Verwendung von MySQL bei der Aktualisierung von current_timestamp

So lösen Sie das Problem der Verwendung von MySQL bei der Aktualisierung von current_timestamp

WBOY
WBOYnach vorne
2023-06-02 12:07:342711Durchsuche
      ... Im Folgenden werden einige Punkte aufgeführt, die Aufmerksamkeit erfordern.

    Lassen Sie uns zuerst über die Schlussfolgerung sprechen.

    Wenn Sie die Zeit für die Aktualisierung mit dem aktuellen Zeitstempel festlegen (ON UPDATE CURRENT_TIMESTAMP), ändert sich beim Aktualisieren des Felds nur der Feldwert. Ihr Zeitfeld ändert sich auf die Zeit des UPDATE-Vorgang.

    Das heißt, wenn keine Feldaktualisierung erfolgt, wird das Zeitfeld nicht aktualisiert, obwohl die Aktualisierungsanweisung erfolgreich ausgeführt und ausgeführt wird.

    Zum Beispiel erstellen wir eine neue Tabelle:

    CREATE TABLE `t_temp` (
      `id` int(11) NOT NULL DEFAULT '0',
      `username` varchar(255) DEFAULT NULL,
      `upd_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '默认取当前时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    Dann fügen wir eine Datenzeile ein und führen dann eine Aktualisierung durch.

    UPDATE t_temp SET username = 'mm' WHERE id = 1;

    wird feststellen, dass die Zeitspalte nicht aktualisiert wird.

    So lösen Sie das Problem der Verwendung von MySQL bei der Aktualisierung von current_timestampIn ähnlicher Weise werden im Programm einige Frameworks verwendet, z. B. tk-mybatis, wenn die Aktualisierungsmethode verwendet wird (z. B. die Methode int updateByPrimaryKeySelective (T-Datensatz);), wenn das Feld nicht tatsächlich aktualisiert wird, obwohl die Syntax ausgeführt wird. Das Zeitfeld wird nicht aktualisiert, dies wird im System leicht übersehen.

    CURRENT_TIMESTAMP() bezieht sich auf ON UPDATE und den Index

    Grundwahrscheinlichkeit

    CURRENT_TIMESTAMP() kann den TIMESTAMP-Typ in MYSQL auf die aktuelle Zeit setzen.

    ON UPDATE hält dies persönlich für ein Artefakt. Es wird im Allgemeinen verwendet, wenn ein Feld updateTIme ist und die letzte Änderungszeit verwendet wird. Auf diese Weise müssen sich Entwickler nicht selbst darum kümmern, MySQL kann es automatisch erledigen.

    Lassen Sie uns zum Schluss über Indizes sprechen. Ich habe vergessen, von wem es ist: Indizes sind eine besondere Art von Dateien (die Indizes in der InnoDB-Datentabelle sind eine Komponente des Tabellenbereichs). auf alle Datensätze in der Datentabelle.

    Man kann sagen, dass der Datenbankindex wie das Inhaltsverzeichnis eines Buches ist, was die Geschwindigkeit von Datenbankabfragen erhöhen kann. Indizes werden in Clustered-Indizes und Nicht-Cluster-Indizes unterteilt. Cluster-Indizes werden nach dem physischen Speicherort der Daten geordnet. Nicht-Cluster-Indizes können jedoch die Geschwindigkeit des Abrufs mehrerer Zeilen erhöhen sind schnell für den Abruf einzelner Zeilen.

    Wenn Sie zu viele Indizes erstellen, wirkt sich dies auf die Geschwindigkeit der Aktualisierungs- und Einfügevorgänge aus, da jede Indexdatei aktualisiert werden muss. Für eine Tabelle, die häufig aktualisiert und eingefügt werden muss, ist es nicht erforderlich, einen separaten Index für eine selten verwendete where-Klausel zu erstellen. Bei kleineren Tabellen ist der Sortieraufwand nicht sehr groß und es besteht keine Notwendigkeit, zusätzliche Indizes zu erstellen .

    Code und Beispiele

    Der folgende Tabellenerstellungscode:

    CREATE TABLE timeDemo(
     
    	id VARCHAR(64) NOT NULL,
    	timeTest TIMESTAMP NOT NULL,
    	PRIMARY KEY (id)
    );

    Beim Hinzufügen neuer Daten:

    Er erstellt automatisch eine Zeit, z. B. eine Bestelltabelle, wenn er die Zeit der Bestellung aufzeichnen möchte Bestellen Sie einfach diese Methode zur Verarbeitung.

    So lösen Sie das Problem der Verwendung von MySQL bei der Aktualisierung von current_timestampEinschließlich Aktualisierungszeit, letzte Aktualisierungszeit:

    CREATE TABLE timeDemo2(
     
    	id VARCHAR(64) NOT NULL,
    	createTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
    	updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
    	PRIMARY KEY (id)
     
    );

    //Es wird kein Problem mit der oben genannten MySQL-Version 5.7 oder höher geben, aber es wird Probleme mit Versionen unter 5.7 geben

    //Für Versionen unter 5.7 wird dies empfohlen Verwenden Sie das Programm zum Einfügen.

    Hier verwenden wir 5.5, um die Wirkung von ON UPDATE zu demonstrieren

    CREATE TABLE timeDemo3(
     
    	id VARCHAR(64) NOT NULL,
    	updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
    	PRIMARY KEY (id)
    );

    Wenn einige Daten in dieser Tabelle geändert werden, wird der Wert von updateTime automatisch aktualisiert.

    Bei jeder Aktualisierung dieses Datensatzes wird updateTime automatisch aktualisiert. In diesem Fall muss sich der Programmierer nicht selbst darum kümmern.

    So lösen Sie das Problem der Verwendung von MySQL bei der Aktualisierung von current_timestampHier lässt sich feststellen, dass viele Internetunternehmen leider gerne MySQL 5.7 oder höher verwenden, während traditionelle Branchen immer noch MySQL 5.5 verwenden.

    Sprechen wir über Indexschlüssel und Index

    CREATE TABLE timeDemo4(
     
    	id VARCHAR(64) NOT NULL,
    	id2 VARCHAR(64) NOT NULL,
    	updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
    	PRIMARY KEY (id),
    	KEY(id2)
    )ENGINE=INNODB DEFAULT CHARSET=utf8

    Der einzige Zweck eines normalen Index besteht darin, die Geschwindigkeit des Datenzugriffs zu verbessern. Diese Art von Index wird durch das Schlüsselwort KEY oder INDEX definiert. Daher sollten Indizes nur für diejenigen Datenspalten erstellt werden, die am häufigsten in Abfragebedingungen (Spalte WHERE = ...) oder Sortierbedingungen (Spalte ORDER BY) vorkommen.

    Um einen Index zu erstellen, sollten Sie nach Möglichkeit die regelmäßigste und kompakteste Datenspalte auswählen, z. B. eine Datenspalte vom Typ Ganzzahl.

    Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem der Verwendung von MySQL bei der Aktualisierung von current_timestamp. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen