Drei Möglichkeiten, doppeltes Einfügen von Daten in MySql zu vermeiden

Drei Möglichkeiten, doppeltes Einfügen von Daten in MySql zu vermeiden

Vorwort

Im Falle eines Primärschlüsselkonflikts oder eines eindeutigen Schlüsselkonflikts in MySql gibt es im Allgemeinen drei Einfügemethoden, um je nach Einfügemethode Fehler zu vermeiden.

  1. Ignorieren einfügen.
  2. ersetzen in
  3. Einfügen bei Aktualisierung doppelter Schlüssel

einfügen ignorieren

„insert ignore“ ignoriert die Daten, die bereits in der Datenbank vorhanden sind. Es werden neue Daten eingefügt, wenn basierend auf dem Primärschlüssel oder dem eindeutigen Index keine Daten in der Datenbank vorhanden sind. Wenn Daten vorhanden sind, werden diese übersprungen.

Kleines Gehäuse

Tabellenstruktur

root:test> Tabelle t3G anzeigen erstellen
*************************** 1. Reihe ***************************
  Tabelle: t3
Tabelle erstellen: CREATE TABLE `t3` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `c1` int(11) DEFAULT NULL,
 `c2` varchar(20) DEFAULT NULL,
 `c3` int(11) DEFAULT NULL,
 Primärschlüssel (`id`),
 EINZIGARTIGER SCHLÜSSEL `uidx_c1` (`c1`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8
1 Zeile im Satz (0,00 Sek.)

root:test> wähle * aus t3;
 +----+------+------+------+
 | Ich würde | c1 | c2 | c3 |
 +----+------+------+------+
 | 1 | 1 | ein | 1 |
 | 2 | 2 | ein | 1 |
 | 8 | NULL | NULL | 1 |
 | 14 | 4 | bb | NULL |
 | 17 | 5 | cc | 4 |
 +----+------+------+------+
 5 Zeilen im Satz (0,00 Sek.)

Einfügen widersprüchlicher Daten

root:test> insert ignore into t3 (c1,c2,c3) values(5,'cc',4),(6,'dd',5); Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,01 Sek.)
Datensätze: 2 Duplikate: 1 Warnungen: 1

Ergebnisse anzeigen

root:test> Warnungen anzeigen;
+---------+------+-----------------------------------------+
| Ebene | Code | Nachricht |
+---------+------+-----------------------------------------+
| Warnung | 1062 | Doppelter Eintrag „5“ für Schlüssel „uidx_c1“ |
+---------+------+-----------------------------------------+
1 Zeile im Satz (0,00 Sek.)

root:test> wähle * aus t3;
+----+------+------+------+
| Ich würde | c1 | c2 | c3 |
+----+------+------+------+
| 1 | 1 | ein | 1 |
| 2 | 2 | ein | 1 |
| 8 | NULL | NULL | 1 |
| 14 | 4 | bb | NULL |
| 17 | 5 | cc | 4 |
| 18 | 6 | tt | 5 |
+----+------+------+------+
6 Zeilen im Satz (0,00 Sek.)

ersetzen in

„replace into“ versucht zuerst, die Daten einzufügen und sie zu löschen, wenn ein Konflikt gefunden wird. Andernfalls tun Sie nichts.

Kleines Gehäuse

root:test> Tabelle t3G anzeigen erstellen
*************************** 1. Reihe ***************************
  Tabelle: t3
Tabelle erstellen: CREATE TABLE `t3` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `c1` int(11) DEFAULT NULL,
 `c2` varchar(20) DEFAULT NULL,
 `c3` int(11) DEFAULT NULL,
 Primärschlüssel (`id`),
 EINZIGARTIGER SCHLÜSSEL `uidx_c1` (`c1`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 Zeile im Satz (0,00 Sek.)

root:test> wähle * aus t3;
+----+------+--------+------+
| Ich würde | c1 | c2 | c3 |
+----+------+--------+------+
| 1 | 1 | cc | 4 |
| 2 | 2 | tt | 5 |
| 3 | 3 | qwewqe | 3 |
+----+------+--------+------+
3 Zeilen im Satz (0,00 Sek.)

Einfügen widersprüchlicher Daten

root:test> ersetze in t3 (c1,c2,c3) Werte(3,'neu',8);
Abfrage OK, 2 Zeilen betroffen (0,02 Sek.)

root:test> wähle * aus t3;
+----+------+------+------+
| Ich würde | c1 | c2 | c3 |
+----+------+------+------+
| 1 | 1 | cc | 4 |
| 2 | 2 | tt | 5 |
| 4 | 3 | neu | 8 |
+----+------+------+------+
3 Zeilen im Satz (0,00 Sek.)

Sie können sehen, dass der ursprüngliche Datensatz verschwunden ist und ein neuer Datensatz erschienen ist.

Einfügen bei Aktualisierung doppelter Schlüssel

Wenn am Ende der INSERT-INTO-Anweisung „Insert bei doppeltem Schlüsselupdate“ angegeben ist und doppelte Werte auftreten, wird das Update nach dem Auftreten der doppelten Werte ausgeführt.

Fall

root:test> Tabelle t3G anzeigen erstellen
*************************** 1. Reihe ***************************
  Tabelle: t3
Tabelle erstellen: CREATE TABLE `t3` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `c1` int(11) DEFAULT NULL,
 `c2` varchar(20) DEFAULT NULL,
 `c3` int(11) DEFAULT NULL,
 Primärschlüssel (`id`),
 EINZIGARTIGER SCHLÜSSEL `uidx_c1` (`c1`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 Zeile im Satz (0,00 Sek.)

root:test> wähle * aus t3; 
+----+------+------+------+
| Ich würde | c1 | c2 | c3 |
+----+------+------+------+
| 1 | 1 | fds | 4 |
| 2 | 2 | youtube | 3 |
| 3 | 3 | czx | 5 |
+----+------+------+------+
3 Zeilen im Satz (0,00 Sek.)

Fügen Sie Daten ein, die mit dem eindeutigen Schlüssel (Spalte c1) des Datensatzes ID=3 in Konflikt stehen.

root:test> in t3(c1,c2,c3) Werte (3,'neu',5) einfügen bei doppelter Schlüsselaktualisierung c1=c1+3; 
Abfrage OK, 2 Zeilen betroffen (0,01 Sek.)

root:test> wähle * aus t3;
+----+------+------+------+
| Ich würde | c1 | c2 | c3 |
+----+------+------+------+
| 1 | 1 | fds | 4 |
| 2 | 2 | youtube | 3 |
| 3 | 6 | czx | 5 |
+----+------+------+------+
3 Zeilen im Satz (0,00 Sek.)

Es ist ersichtlich, dass sich der Datensatz mit der ID = 3 geändert hat, c1 = Original c1 + 3 und die anderen Spalten sich nicht geändert haben.

Oben sind die Details von vier MySql-Methoden zum Vermeiden doppelter Dateneinfügung aufgeführt. Weitere Informationen zum Vermeiden doppelter Dateneinfügung in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Drei Möglichkeiten, um zu verhindern, dass MySQL doppelte Daten einfügt
  • MySQL verwendet UNIQUE, um das Einfügen nicht doppelter Daten zu implementieren
  • So verhindern Sie, dass MySQL doppelte Datensätze einfügt
  • Mehrere Möglichkeiten, das doppelte Einfügen von Datensätzen in MySql zu vermeiden
  • 4 Möglichkeiten, doppeltes Einfügen von Daten in Mysql zu vermeiden

<<:  Acht Möglichkeiten zur Implementierung von Kommunikation in Vue

>>:  Unterscheidung zwischen Linux-Hardlinks und Softlinks

Artikel empfehlen

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.13

Installation der Msyql-Datenbank. Zu Ihrer Inform...

Methode zum Erstellen eines Redis-Clusters basierend auf Docker

Laden Sie das Redis-Image herunter Docker-Pull yy...

Die detaillierteste Methode zur Installation von Docker auf CentOS 8

Installieren Sie Docker unter CentOS 8 Offizielle...

Beispiel für die Einrichtung eines mehrspaltigen Layouts gleicher Höhe mit CSS

Mehrere Spalten haben zunächst unterschiedliche I...

Einige Tipps zum Schreiben leistungsstarker HTML-Anwendungen

Wie können Sie die Leistung einer Webseite verbes...

Erläuterung des Prinzips des MySQL-Replikationsmechanismus

Hintergrund Bei der Replikation handelt es sich u...

Implementierungscode für die Dateimontage von DockerToolBox

Wenn Sie Docker verwenden, stellen Sie möglicherw...

Analyse der problematischen „Aborted“-Warnung in MySQL anhand von Fallstudien

Dieser Artikel stellt hauptsächlich den relevante...

Beispielcode zum Ändern des Textstils der Eingabeaufforderung in HTML

Auf vielen Websites wird im Eingabefeld Hinweiste...

Verwenden von Zabbix zum Überwachen des Ogg-Prozesses (Linux-Plattform)

Der Ogg-Prozess einer vor einiger Zeit erstellten...

Detaillierte Schritte zur Installation von RabbitMQ im Docker

Inhaltsverzeichnis 1. Finde den Spiegel 2. Laden ...

Tiefgreifendes Verständnis der Rolle von Vuex

Inhaltsverzeichnis Überblick So teilen Sie Daten ...