Detaillierte Erklärung der Lösung zum doppelten Einfügen von MySQL-Primärschlüssel und eindeutigem Schlüssel

Detaillierte Erklärung der Lösung zum doppelten Einfügen von MySQL-Primärschlüssel und eindeutigem Schlüssel

Beim Einfügen von Daten kann das Problem auftreten, dass doppelte Daten eingefügt werden. Diese Daten dürfen jedoch keine doppelten Werte enthalten:

CREATE TABLE stuInfo (
  id INT NOT NULL COMMENT 'Seriennummer',
  Name VARCHAR (20) NICHT NULL STANDARD '' KOMMENTAR 'Name',
  Alter INT NICHT NULL DEFAULT 0 KOMMENTAR 'Alter',
  Primärschlüssel (ID),
  EINZIGARTIGER SCHLÜSSEL uniq_name(Name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Studententabelle';
mysql> INSERT INTO stuInfo (id,name,alter) WERTE (1,'yoona',20),(1,'xiaosi',25),(2,'aa',24);
FEHLER 1062 (23000): Doppelter Eintrag „1“ für Schlüssel „PRIMARY“

Lösung:

1. IGNORIEREN

Verwenden Sie „Ignorieren“, um doppelte Datensätze automatisch zu ignorieren, wenn der eingefügte Wert auf einen doppelten Primärschlüssel (PRIMARY KEY) oder eindeutigen Schlüssel (UNIQUE KEY) trifft, ohne das Einfügen nachfolgender Datensätze zu beeinträchtigen.

INSERT IGNORE INTO stuInfo (Name, Geburtstag, ist gelöscht) VALUES ('yoona', '05.01.1990', 0), ('aa', '16.01.1990', 0), ('bb', '17.01.1990', 0);

Laufergebnisse:

mysql> INSERT IGNORE INTO stuInfo (id,name,alter) WERTE (1,'yoona',20),(1,'xiaosi',25),(2,'aa',24);
Abfrage OK, 2 Zeilen betroffen (0,02 Sek.)
Datensätze: 3 Duplikate: 1 Warnungen: 0
mysql> wähle * aus stuInfo; 
+----+-------+-----+
| ID | Name | Alter |
+----+-------+-----+
| 1 | joona | 20 |
| 2 | aa | 24 |
+----+-------+-----+
2 Zeilen im Satz (0,00 Sek.)

Aus den laufenden Ergebnissen können wir ersehen, dass nur zwei Zeilen betroffen sind, was bedeutet, dass (1, 'yoona', 20) Daten eingefügt werden, (1, 'xiaosi', 25) doppelte Daten automatisch ignoriert werden und (2, 'aa', 24) nicht doppelte Daten weiterhin eingefügt werden und von den doppelten Daten nicht betroffen sind.

2. ERSETZEN

Wenn Sie „Ersetzen“ zum Einfügen von Datensätzen mit doppelten Primärschlüsseln oder eindeutigen Schlüsseln verwenden, löschen Sie die doppelten Datensätze in der Tabelle, bevor Sie sie einfügen.

mysql> REPLACE INTO stuInfo (Name, Geburtstag, ist_gelöscht) VALUES ('yoona', '1990-01-15', 0), ('yoona', '1990-02-16', 0), ('aa', '1990-01-13', 0);
Abfrage OK, 4 Zeilen betroffen (0,02 Sek.)
Datensätze: 3 Duplikate: 1 Warnungen: 0
Laufergebnisse:
 
mysql> wähle * aus stuInfo; +----+-------+------------+------------+
| ID | Name | Geburtstag | ist_gelöscht |
+----+----------+------------+------------+
| 21 | yoona | 16.02.1990 | 0 |
| 22 | aa | 13.01.1990 | 0 |
+----+----------+------------+------------+
2 Zeilen im Satz (0,00 Sek.)

Aus den Ausgabeinformationen können wir erkennen, dass 4 Zeilen betroffen sind, was bedeutet, dass zuerst ('yoona','1990-01-15',0) eingefügt und dann ('yoona','1990-01-15',0) gelöscht wurde.

3. BEIM UPDATE DES DOPPELTEN SCHLÜSSELS

Wenn der eingefügte Datensatz auf einen doppelten Primärschlüssel oder eindeutigen Schlüssel stößt, wird die später definierte UPDATE-Operation ausgeführt. Dies entspricht der Ausführung einer Einfügeoperation zuerst und einer anschließenden Aktualisierungsoperation basierend auf dem Primärschlüssel oder eindeutigen Schlüssel.

Tabelle löschen, wenn vorhanden, stuInfo;
CREATE TABLE stuInfo (
  id INT NOT NULL COMMENT 'Seriennummer',
  Name VARCHAR (20) NICHT NULL STANDARD '' KOMMENTAR 'Name',
  Alter INT NICHT NULL DEFAULT 0 KOMMENTAR 'Alter',
  Primärschlüssel (ID),
  EINZIGARTIGER SCHLÜSSEL uniq_name(Name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Studententabelle';

VALUES-Erklärung nach ON DUPLICATE KEY UPDATE:

VAULES(age) bezeichnet den Wert des einzufügenden Datensatzes

Das Alter bezieht sich auf den eigenen Wert der Tabelle, den eingefügten Wert.

(1) Erstes Szenario:

#VALUES(Alter) einzufügender Wert 25
INSERT INTO stuInfo (id,name,alter) VALUES (1,'yoona',20),(1,'xiaosi',25) BEI DUPLIZIERTEM SCHLÜSSEL UPDATE Alter = VALUES(Alter) + 1;

ist gleichbedeutend mit:

INSERT INTO stuInfo (id,name,alter) VALUES (1,'yoona',20);
UPDATE stuInfo 
SET Alter = WERTE(Alter) + 1
WO id = 1;

Laufergebnisse:

mysql> INSERT INTO stuInfo (id,name,alter) VALUES (1,'yoona',20),(1,'xiaosi',25) BEI DUPLIZIERTEM SCHLÜSSEL UPDATE Alter = VALUES(Alter) + 1;
Abfrage OK, 3 Zeilen betroffen (0,01 Sek.)
Datensätze: 2 Duplikate: 1 Warnungen: 0
mysql> wähle * aus stuInfo;   
+----+-------+-----+
| ID | Name | Alter |
+----+-------+-----+
| 1 | joona | 26 |
+----+-------+-----+
1 Zeile im Satz (0,00 Sek.)

(2) Der zweite Fall:

#age-Wert 20 wurde eingefügt
INSERT INTO stuInfo (id,name,alter) VALUES (1,'yoona',20),(1,'xiaosi',25) BEI DUPLIZIERTEM SCHLÜSSELUPDATE Alter = Alter + 1;

ist gleichbedeutend mit:

INSERT INTO stuInfo (id,name,alter) VALUES (1,'yoona',20);
UPDATE stuInfo 
SET Alter = Alter + 1
WO id = 1;

Laufergebnisse:

mysql> INSERT INTO stuInfo (id,name,alter) VALUES (1,'yoona',20),(1,'xiaosi',25) BEI DUPLIZIERTEM SCHLÜSSEL UPDATE Alter = Alter + 1;
Abfrage OK, 3 Zeilen betroffen (0,02 Sek.)
Datensätze: 2 Duplikate: 1 Warnungen: 0
mysql> wähle * aus stuInfo;
 +----+-------+-----+
| ID | Name | Alter |
+----+-------+-----+
| 1 | joona | 21 |
+----+-------+-----+
1 Zeile im Satz (0,00 Sek.)

Wenn Sie auf doppelt eingefügte Daten stoßen, wird ON DUPLICATE KEY UPDATE verwendet, um die eingefügten Daten zu ändern. Sie können damit doppelt eingefügte Daten abrufen (direkt den Feldnamen verwenden) oder doppelt eingefügte Daten abrufen (Werte (Feldname)). Wir werden keine doppelten Daten einfügen.

Wiederholen Sie die eingefügten Daten: (1,'yoona',20) im obigen Beispiel

Wiederholen Sie die einzufügenden Daten: (1,'yoona',25) im obigen Beispiel

Dies ist das Ende dieses Artikels mit der detaillierten Erklärung der Lösung für das doppelte Einfügen des MySQL-Primärschlüssels und des eindeutigen Schlüssels. Weitere relevante Inhalte zum doppelten Einfügen des MySQL-Primärschlüssels und des eindeutigen Schlüssels finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • 4 Möglichkeiten, doppeltes Einfügen von Daten in Mysql zu vermeiden
  • Drei Möglichkeiten, um zu verhindern, dass MySQL doppelte Daten einfügt
  • Drei Möglichkeiten, doppeltes Einfügen von Daten in MySql zu vermeiden
  • Die gespeicherte MySQL-Prozedur ermittelt doppelte Daten und fügt sie nicht ein
  • Teilen Sie die Methode zum Ignorieren doppelter Daten beim Einfügen von Daten in MySQL
  • Mehrere Möglichkeiten, das doppelte Einfügen von Datensätzen in MySql zu vermeiden
  • Mehrere Methoden zum Einfügen doppelter Schlüsselwerte in MySQL

<<:  Detaillierte Erläuterung der Installation und Konfiguration des Nginx+Tomcat-Load-Balancing-Clusters

>>:  Detaillierte Erklärung des Unterschieds zwischen einem href=# und einem href=javascript:void(0)

Artikel empfehlen

Detaillierte Erläuterung des auf Python basierenden MySQL-Replikationstools

Inhaltsverzeichnis 1. Einleitung Zweites Training...

Eine kurze Erläuterung zum Anpassen der Hostdatei in Docker

Inhaltsverzeichnis 1. Befehl 2. docker-compose.ym...

Lösung für die Ineffektivität der flexiblen Layoutbreite in CSS3

In Projekten wird häufig das zweispaltige Layout ...

So fügen Sie einen Link in HTML ein

Jede Webseite hat eine Adresse, die durch eine UR...

Beispiel für asynchronen Dateiupload in HTML

Code kopieren Der Code lautet wie folgt: <form...

Vue implementiert Tab-Tab-Umschaltung

In diesem Artikelbeispiel wird der spezifische Co...

js implementiert einen einfachen Countdown

In diesem Artikelbeispiel wird der spezifische Co...

Implementierung des CSS-Animationseffekts für dynamische Höhenübergänge

Diese Frage stammt aus einer Nachricht auf Nugget...

CSS Polarkoordinaten Beispielcode

Vorwort Das Projekt stellt Anforderungen an Karte...

So erhalten/berechnen Sie den Offset eines Seitenelements mit JavaScript

Frage Durch Klicken auf ein Steuerelement wird ei...

Lösen Sie schnell das Problem der chinesischen Eingabemethode unter Linux

Hintergrund: Ich arbeite derzeit an Funktionen fü...

JS+Canvas zeichnet ein Glücksrad

In diesem Artikel wird der spezifische Code der J...

Analyse und Lösung des beim Start von MySQL gemeldeten Fehlers „ERROR:2002“

Vorwort Dieser Artikel stellt hauptsächlich die A...

Serielle und parallele Operationen in JavaScript

Inhaltsverzeichnis 1. Einleitung 2. es5-Methode 3...