Heim >Datenbank >MySQL-Tutorial >Ausführliche Untersuchung der Nutzungsdetails von UPDATE in MySQL
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.
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
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 diesesSQL
schreiben? AnforderungsrealisierungManche Freunde denken vielleicht, dass das nicht einfach ist?
Sie können die lokale Variable +
UPDATE
verwenden, um dies zu erreichen. Gehen Sie direkt zu
SQLSchauen wir uns den tatsächlichen Fall an
Tabelletbl_batch_update
Die Daten ist wie folgt
Der Ausführungseffekt ist wie folgt Nach dem Update Strenger Wie erreicht man das? Unterstützt UPDATEauch
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
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
und
LIMITLOW_PRIORITY Einer der Modifikatoren 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_PRIORITYund 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
aktualisiert auf 9003 Wenn der Primärschlüssel in Konflikt gerät, wird das gesamte
UPDATEabgebrochen, 9000 aktualisiert auf
9001wird 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
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
IGNOREgemeldete Fehler kann tatsächlich auch ORDER verwendet werden Die BY
LIMIT
-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,
LIMITist 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 Weicht der Wert etwas vom erwarteten Wert ab? Das SET einer einzelnen Tabelle 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!