Detaillierte Erklärung, wie Sie die Fallstricke beim Ersetzen von logischem SQL in MySQL vermeiden können

Detaillierte Erklärung, wie Sie die Fallstricke beim Ersetzen von logischem SQL in MySQL vermeiden können

Der Unterschied zwischen „Ersetzen durch“ und „Einfügen in“ bei doppeltem Schlüssel

Verwendung von „Ersetzen“

Wenn kein Konflikt vorliegt, entspricht dies dem Einfügen, und die Standardwerte anderer Spalten werden verwendet. Wenn ein Schlüsselkonflikt vorliegt, wird die Auto-Increment-Spalte aktualisiert, um die in Konflikt stehende Spalte zu ersetzen, und die Standardwerte anderer Spalten werden verwendet.
Com_replace fügt 1 hinzu
Innodb_rows_updated fügt 1 hinzu

Verwendung von „Einfügen in …“ bei doppeltem Schlüssel

Wenn kein Konflikt vorliegt, entspricht dies dem Einfügen. Wenn die Standardwerte anderer Spalten mit dem Schlüssel in Konflikt stehen, werden nur die entsprechenden Feldwerte aktualisiert.
Com_insert fügt 1 hinzu
Innodb_rows_inserted wird um 1 erhöht

Experimentelle Demonstration

Tabellenstruktur

Tabelle erstellen helei1(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
Name varchar (20) NICHT NULL STANDARD '',
Alter tinyint(3) unsigned NOT NULL Standard 0,
Primärschlüssel (ID),
EINZIGARTIGER SCHLÜSSEL uk_name (Name)
)
ENGINE=innodb AUTO_INCREMENT=1 
STANDARD-ZEICHENSATZ=utf8;

Tabellendaten

[email protected] (helei)> wähle * von helei1;
+----+-----------+-----+
| ID | Name | Alter |
+----+-----------+-----+
| 1 | He Lei | 26 |
| 2 | Xiao Ming | 28 |
| 3 | Xiaohong | 26 |
+----+-----------+-----+
3 Zeilen im Satz (0,00 Sek.)

durch Ersetzen in Gebrauch nehmen

[email protected] (helei)> ersetzen durch helei1 (Name) Werte('Name');
Abfrage OK, 2 Zeilen betroffen (0,00 Sek.)
[email protected] (helei)> wähle * von helei1;
+----+-----------+-----+
| ID | Name | Alter |
+----+-----------+-----+
| 2 | Xiao Ming | 28 |
| 3 | Xiaohong | 26 |
| 4 | He Lei | 0 |
+----+-----------+-----+
3 Zeilen im Satz (0,00 Sek.)
[email protected] (helei)> ersetzen durch helei1 (Name) Werte('Helei');
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
[email protected] (helei)> wähle * von helei1;
+----+-----------+-----+
| ID | Name | Alter |
+----+-----------+-----+
| 2 | Xiao Ming | 28 |
| 3 | Xiaohong | 26 |
| 4 | He Lei | 0 |
| 5 | Aixuan | 0 |
+----+-----------+-----+
4 Zeilen im Satz (0,00 Sek.)

Verwendung von „Ersetzen“

Wenn kein Schlüsselkonflikt vorliegt, entspricht „Ersetzen in“ dem „Einfügen“ und es werden die Standardwerte der anderen Spalten verwendet.

Wenn ein Schlüsselkonflikt auftritt, wird die Auto-Increment-Spalte aktualisiert, um die in Konflikt stehende Spalte zu ersetzen, und die verbleibenden Spalten werden auf ihre Standardwerte zurückgesetzt.

Einfügen in … bei doppeltem Schlüssel:

[email protected] (helei)> wähle * von helei1;
+----+-----------+-----+
| ID | Name | Alter |
+----+-----------+-----+
| 2 | Xiao Ming | 28 |
| 3 | Xiaohong | 26 |
| 4 | He Lei | 0 |
| 5 | Aixuan | 0 |
+----+-----------+-----+
4 Zeilen im Satz (0,00 Sek.)
[email protected] (helei)> einfügen in helei1 (Name, Alter) Werte('Name',0) bei Aktualisierung doppelter Schlüssel Alter=100;
Abfrage OK, 2 Zeilen betroffen (0,00 Sek.)
[email protected] (helei)> wähle * von helei1;
+----+-----------+-----+
| ID | Name | Alter |
+----+-----------+-----+
| 2 | Xiao Ming | 28 |
| 3 | Xiaohong | 26 |
| 4 | He Lei | 100 |
| 5 | Aixuan | 0 |
+----+-----------+-----+
4 Zeilen im Satz (0,00 Sek.)
[email protected] (helei)> wähle * von helei1;
+----+-----------+-----+
| ID | Name | Alter |
+----+-----------+-----+
| 2 | Xiao Ming | 28 |
| 3 | Xiaohong | 26 |
| 4 | He Lei | 100 |
| 5 | Aixuan | 0 |
+----+-----------+-----+
4 Zeilen im Satz (0,00 Sek.)
[email protected] (helei)> in helei1 (Name) Werte („Name“) bei Aktualisierung auf doppelten Schlüssel einfügen, Alter=120;
Abfrage OK, 2 Zeilen betroffen (0,01 Sek.)
[email protected] (helei)> wähle * von helei1;
+----+-----------+-----+
| ID | Name | Alter |
+----+-----------+-----+
| 2 | Xiao Ming | 28 |
| 3 | Xiaohong | 26 |
| 4 | He Lei | 100 |
| 5 | Aixuan | 120 |
+----+-----------+-----+
4 Zeilen im Satz (0,00 Sek.)
[email protected] (helei)> in helei1 (Name) Werte einfügen („existiert nicht“) bei doppeltem Schlüsselupdate, Alter=80;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
[email protected] (helei)> wähle * von helei1;
+----+-----------+-----+
| ID | Name | Alter |
+----+-----------+-----+
| 2 | Xiao Ming | 28 |
| 3 | Xiaohong | 26 |
| 4 | He Lei | 100 |
| 5 | Aixuan | 120 |
| 8 | existiert nicht | 0 |
+----+-----------+-----+
5 Zeilen im Satz (0,00 Sek.)

Zusammenfassen

Die Verwendung von „replace into“ entspricht dem Ausführen einer Löschoperation und dann einer Einfügeoperation, wenn ein widersprüchlicher Schlüssel gefunden wird. Der Standardwert wird für nicht angegebene Spalten verwendet. Dies führt dazu, dass sich der automatisch inkrementierte Primärschlüssel ändert. Wenn die Tabelle Fremdschlüssel enthält oder die Geschäftslogik vom Primärschlüssel abhängt, tritt eine Ausnahme auf. Daher wird empfohlen, bei doppelten Schlüsseln die Funktion „Einfügen in …“ zu verwenden. Aufgrund der Eile beim Schreiben sind einige Fehler oder Ungenauigkeiten im Artikel unvermeidlich. Wir bitten die Leser aufrichtig, etwaige Unangemessenheiten zu kritisieren und zu korrigieren.

Nun, das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Tiefgreifendes Verständnis der logischen Architektur von MySQL
  • Gespeicherte MySQL-Prozeduren, d. h. eine Zusammenfassung allgemeiner logischer Wissenspunkte
  • MySQL Advanced Learning Notes (Teil 3): Einführung in die logische Architektur von MySQL, detaillierte Erläuterung der MySQL-Speicher-Engine
  • Detaillierte Erläuterung des MySQL-Ausführungsprinzips, der logischen Schichtung und der Änderung der Datenbankverarbeitungs-Engine
  • Detaillierte Erläuterung der logischen Architektur von MySQL
  • Mit PHP auf die MySql-Datenbank zugreifen - logische Operationen und Beispiele zum Hinzufügen, Löschen, Ändern und Prüfen
  • Logische Beurteilung und bedingte Kontrolle von gespeicherten MySQL-Prozeduren
  • MySQL verwendet frm-Dateien und ibd-Dateien, um Tabellendaten wiederherzustellen
  • MySQL verwendet Binlog-Protokolle zur Implementierung der Datenwiederherstellung
  • MySQL-Schnellwiederherstellungslösung basierend auf dem Zeitpunkt
  • Implementierung der MySQL5.7 mysqldump-Sicherung und -Wiederherstellung
  • Zusammenfassung der Tests für logische MySQL-Sicherungen und -Wiederherstellungen

<<:  So aktualisieren Sie https unter Nginx

>>:  Detaillierte Erklärung der praktischen Anwendung regulärer Ausdrücke in JavaScript

Artikel empfehlen

Lösen Sie das Problem, dass ifconfig im Docker nicht verfügbar ist

Als ich kürzlich Docker lernte, stellte ich fest,...

Ausführliche Erläuterung der HTML-Grundlagen (Teil 1)

1. Das WEB verstehen Webseiten bestehen hauptsäch...

202 kostenlose, hochwertige XHTML-Vorlagen (1)

Hier präsentiert 123WORDPRESS.COM den ersten Teil...

Detaillierte Erklärung der Befehle zum Anzeigen von Linux-Dateien

So zeigen Sie Linux-Dateien an Befehl zum Anzeige...

SQL-Implementierung LeetCode (176. Zweithöchstes Gehalt)

[LeetCode] 176. Zweithöchstes Gehalt Schreiben Si...

So stellen Sie per SSH eine Verbindung zum Docker-Server her

Als ich zum ersten Mal mit Docker in Berührung ka...

Detaillierte Erklärung eines einfachen Schneeeffektbeispiels mit JS

Inhaltsverzeichnis Vorwort Hauptimplementierungsc...

Beispielcode zur Implementierung der Menüberechtigungssteuerung in Vue

Wenn Benutzer an einem Backend-Verwaltungssystem ...

Detaillierte Erklärung zur Installation von MySQL in der Alibaba Cloud

Als leichte Open-Source-Datenbank wird MySQL häuf...

So erzielen Sie mit CSS einen Daten-Hotspot-Effekt

Die Wirkung ist wie folgt: analysieren 1. Hier se...

Detaillierte Verwendung des Docker-Maven-Plugins

Inhaltsverzeichnis Docker-Maven-Plugin Schritte z...