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

Prozessdiagramm zur Implementierung der Zabbix WEB-Überwachung

Nehmen Sie als Beispiel die WEB-Schnittstelle von...

So implementieren Sie Call, Apply und Binding in nativem JS

1. Implementieren Sie den Anruf Schritt: Legen Si...

Lösung für 404-Fehler beim Herunterladen einer APK-Datei vom IIS-Server

Bei der Verwendung von IIS als Server wurde die A...

Analyse des Implementierungsprozesses der Docker-Container-Orchestrierung

In tatsächlichen Entwicklungs- oder Produktionsum...

CocosCreator klassisches Einstiegsprojekt flappybird

Inhaltsverzeichnis Entwicklungsumgebung Game-Engi...

Detaillierte Erklärung der HTML-Style-Tags und der zugehörigen CSS-Referenzen

HTML-Style-Tag Stil-Tag - Verwenden Sie dieses Ta...

Detaillierte Erklärung des TIMESTAMPDIFF-Falls in MySQL

1. Syntax TIMESTAMPDIFF(Einheit, Beginn, Ende); G...

Der vollständige Leitfaden zum Rasterlayout in CSS

Grid ist ein zweidimensionales Rasterlayoutsystem...

Tutorial zur Installation von mysql5.7.17 über yum auf redhat7

Die Linux-Betriebssysteme der RHEL/CentOS-Reihe v...

Javascript zum Umschalten durch Klicken auf das Bild

Durch Klicken Bilder zu wechseln, ist im Leben ei...

Weitere Features der JavaScript-Konsole

Inhaltsverzeichnis Überblick console.log konsole....

Grundlegendes Lernen und Erfahrungsaustausch zu MySQL-Transaktionen

Eine Transaktion ist eine logische Gruppe von Ope...