Heim  >  Artikel  >  Datenbank  >  Ausführliche Untersuchung der Nutzungsdetails von UPDATE in MySQL

Ausführliche Untersuchung der Nutzungsdetails von UPDATE in MySQL

青灯夜游
青灯夜游nach vorne
2022-10-11 19:32:203353Durchsuche

In MySQL können Sie die UPDATE-Anweisung verwenden, um Daten in einer oder mehreren Tabellen zu ändern und zu aktualisieren. Der folgende Artikel wird Ihnen dabei helfen, die Details der Verwendung von UPDATE in MySQL zu erkunden. Ich hoffe, er ist hilfreich für Sie.

Ausführliche Untersuchung der Nutzungsdetails von UPDATE in MySQL

Anforderungshintergrund

Vor kurzem habe ich eine Datenmigrationsanforderung erhalten. Die Daten des alten Systems werden nicht mehr in das neue System migriert, und der Geschäftsbetrieb wird nicht mehr ausgeführt auf dem neuen System

 Um die Auswirkungen der Migration zu verringern, werden Daten stapelweise migriert, was bedeutet, dass das alte und das neue System für einen bestimmten Zeitraum parallel ausgeführt werden

 Die Daten werden nicht entsprechend der ID in Stapel unterteilt Bereich, was bedeutet, dass die IDs jedes Datenstapels unregelmäßig sind

 Um die Übereinstimmung zwischen den alten und neuen Systemdaten sicherzustellen, verwendet die ID des neuen Systems so weit wie möglich die ID des alten Systems

Da die Tabellen-ID im alten und neuen System automatisch erhöht wird, kann es sein, dass die ID des alten Systems während der Migration vom neuen System belegt wurde. Sie ähnelt der folgenden Beschreibung der Anforderungen

Versuchen Sie beim Migrieren von Daten, so weit wie möglich die IDs des alten Systems zu verwenden, und widersprüchliche IDs müssen stapelweise angepasst werden

  So passen Sie diesen Stapel widersprüchlicher IDs an

Das ist genau das, was ich möchte Jetzt erreichen

Meine Implementierung besteht darin, eine Start-ID voreinzustellen, die auf dem Wachstum der Geschäftsdaten und der aktuellen maximalen ID des neuen Systems basiert  

  Wie soll ich dieses

SQL

schreiben?

Anforderungsrealisierung

Manche Freunde denken vielleicht, dass das nicht einfach ist?

 Es sind nur 5 Daten, kann man das nicht einfach so machen?

  Es ist so eine einfache Sache, aber es gibt so viele Vorahnungen. Wissen Sie, wie man es macht, Sir?

 In diesem Moment wurde dem Poster plötzlich klar: Mein Freund, du bist so großartig

Aber wenn es viele widersprüchliche Daten gibt (Hunderte oder Tausende), änderst du sie dann auch einzeln so?

 Wenn du das wirklich tust, bewundere ich dich wirklich

 Natürlich gibt es vernünftigere Freunde

 Also wie kann ich das erreichen?

Ausführliche Untersuchung der Nutzungsdetails von UPDATE in MySQL                     Sie können die lokale Variable + 

UPDATE

  verwenden, um dies zu erreichen. Gehen Sie direkt zu

SQL

    Schauen wir uns den tatsächlichen Fall an

  Tabelle

tbl_batch_update 

 Die Daten ist wie folgt

 Der Ausführungseffekt ist wie folgt

 Nach dem Update

 Strenger

 Wie erreicht man das? Unterstützt

UPDATE

auch

ORDER BY?  Es wird wirklich unterstützt, wie unten gezeigt

Während das Poster normalerweise UPDATE verwendet, kombiniert er es im Grunde nicht mit ORDER BY, noch hat er versucht, es mit LIMIT

zu kombinieren. Dieses Mal hat er versucht, das Poster zu erstellen Fühlen Sie sich wohler mit UPDATE ein seltsames Gefühl, wie sollte die vollständige Syntax sein? Lesen wir langsam weiter

UPDATE

Das Folgende ist alles auf der Grundlage der offiziellen Dokumente UPDATE Statement von MySQL 8.0 zusammengestellt. Es wird empfohlen, dass Sie direkt zu den offiziellen Dokumenten gehen

 Einzelne Tabellensyntax ??

DURCH

und

LIMIT

 

LOW_PRIORITY

  Einer der Modifikatoren von

UPDATE

, der verwendet wird, um die Priorität von

SQL

zu reduzieren. LOW_PRIORITY , Die Ausführung von UPDATE wird sein verzögert, bis kein anderer Client Daten aus der Tabelle liest Allerdings unterstützt nur die Speicher-Engine der Sperre auf Tabellenebene

LOW_PRIORITY

. Zu den Speicher-Engines der Sperre auf Tabellenebene gehören: MyISAM,

MEMORY

und MERGE , also das Beste Das häufig verwendete InnoDB wird nicht unterstütztEs gibt nur sehr wenige Verwendungsszenarien, kommen Sie mir einfach bekannt vor

 IGNORE  Einer der Modifikatoren von UPDATE

, der verwendet wird, um zu erklären, dass ein Fehler aufgetreten ist während der Ausführung der SQL-Verarbeitungsmethode   Wenn IGNORE nicht verwendet wird, wird UPDATE abgebrochen, wenn während der Ausführung ein Fehler auftritt, wie unten gezeigt

 

9002

aktualisiert auf 9003 Wenn der Primärschlüssel in Konflikt gerät, wird das gesamte

UPDATE

abgebrochen, 9000 aktualisiert auf

9001

wird zurückgesetzt,

9003 ~ 9005 Update nicht durchgeführt  Wenn Sie IGNORE verwenden, wird Folgendes angezeigt: Was ist los?   UPDATE Selbst wenn während der Ausführung ein Fehler auftritt, wird die Ausführung abgeschlossen und die Anzahl der betroffenen Zeilen wird schließlich zurückgegeben

 Die betroffenen Zeilen in der obigen Rückgabe sind 2 Können Sie mir sagen, welche beiden Zeilen geändert wurden?

 Weitere Informationen zu IGNORE finden Sie unter: Die Auswirkung von IGNORE auf die Anweisungsausführung

  In Bezug auf Nutzungsszenarien kann es verwendet werden, wenn das alte und das neue System parallel sind und eine Datenmigration durchführen, wenn der Primärschlüssel oder eindeutige Schlüsselkonflikte. Ignorieren Sie es einfach

 ORDER BY

Wenn Sie den Ausführungsprozess von UDPATE kennen, werden Sie es besser verstehen

  UPDATE Eigentlich gibt es zwei Phasen: Check-Phase und Aktualisierungsphase

 Zeile für Zeile verarbeiten. Wenn eine Zeile die WHERE-Klausel erfüllt, aktualisieren Sie eine Zeile

 Also hier ist ORDER BY dasselbe wie SELECT im ORDER BY hat den gleichen Effekt

In Bezug auf die Verwendungsszenarien können Sie zurückgehen und sich den zuvor erwähnten Bedarfshintergrund ansehen. Der in Fall 1 von

IGNORE

gemeldete Fehler kann tatsächlich auch ORDER verwendet werden Die BY

 

LIMIT

 

LIMIT row_count

-Klausel ist das Zeilenübereinstimmungslimit. Sobald die row_count Zeilen gefunden werden, die die WHERE-Klausel erfüllen, wird die Anweisung unabhängig davon, ob diese Zeilen tatsächlich geändert wurden oder nicht, sofort gestoppt Das heißt,

LIMIT

ist auf den check beschränkt Phase und hat nichts mit der Update-Phase Beziehung

 

Hinweis: ​​Es gibt immer noch einen Unterschied mit SELECT in der Syntax LIMIT

 

 

Wert DEFAULT

 

UPDATE Der Wert der SET-Klausel ist ein Ausdruck. Wir können verstehen, was dieser DEFAULT bedeutet bedeuten?个 Schauen wir uns zunächst eine solche Frage an.

  Schauen wir uns SQL_MODE an und führen SELECT @@sql_mode; aus und erhalten das Ergebnis

  STRICT_TRANS_TABLES zeigt diesen strengen Modus an aktiviert ist, was für INSERT korrekt ist und UPDATE Anweisungen Wert Die Kontrolle wird strenger sein

Wenn wir den strikten Modus ausschalten und uns die Ausführungsergebnisse ansehen

  Name Felddeklaration wird NOT. NULL , im Nicht-strikter SQL-Modus, es wird erfolgreich sein, name auf NULL zu setzen, aber der geänderte Wert ist nicht NULL , sondern der Standardwert vom Typ VARCHAR: leerer String ('')

Zusammenfassung

   1. Im strikten SQL-Modus wird für die Feldeinstellung NOT NULL NULL ein Fehler direkt gemeldet Das Update wird fail

   2. Im nicht strengen SQL-Modus für Die Feldeinstellung NOT NULL NULL setzt den Feldwert auf den Standardwert, der dem Feldtyp entspricht

Über den Standardwert des Feldtyps können Sie Folgendes anzeigen: Datentyp-Standardwerte

Über sql_mode können Sie Folgendes anzeigen: Server-SQL-Modi

Normalerweise befindet sich MySQL der generierten Umgebung im Allgemeinen im strikten Modus, sodass jeder weiß, dass es gibt Wert Default. SQL

Werfen wir einen Blick auf die Ergebnisse

 

Name

Weicht der Wert etwas vom erwarteten Wert ab?

  Das SET einer einzelnen Tabelle

UPDATE

wird von links nach rechts ausgeführt, das Multi-Table

UPDATE

jedoch nicht. Es kann nicht garantiert werden, dass dies der Fall ist

Zusammenfassung

 1. Ob UPDATE oder DELETE, es gibt einen Prozess, bei dem zuerst überprüft und jede Zeile verarbeitet wird, nachdem sie gefunden wurde

 2. LOW_PRIORITY in der Syntax von UPDATE wird selten verwendet, IGNORE wird gelegentlich verwendet und ORDER BY und LIMIT werden relativ häufiger verwendet, sind aber beides verwirrend Ripe

 3, sql_mode ist ein relativ wichtiger Wissenspunkt und wird jedem zum Beherrschen empfohlen; für die Produktionsumgebung wird dringend empfohlen, den strikten Modus zu aktivieren

Originaladresse: https://www.cnblogs. com/youzhibing/p/16719474.html

Autor: Qingshi Road

[Verwandte Empfehlungen: MySQL-Video-Tutorial]

Das obige ist der detaillierte Inhalt vonAusführliche Untersuchung der Nutzungsdetails von UPDATE in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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