Wie fügt man eine Zeile ein, wenn sie in MySQL nicht vorhanden ist

Rayven Esplanada 30 Januar 2023
  1. Verwenden Sie REPLACE, um einzufügen, falls in MySQL nicht vorhanden
  2. Verwenden Sie INSERT IGNORE zum Einfügen, falls in MySQL nicht vorhanden
  3. Verwenden Sie INSERT ... ON DUPLICATE KEY UPDATE zum Einfügen, falls in MySQL nicht vorhanden
Wie fügt man eine Zeile ein, wenn sie in MySQL nicht vorhanden ist

Dieses Tutorial zeigt Ihnen, wie Sie eine Zeile in eine Tabelle einfügen, wenn sie noch nicht in mySQL existiert.

Es gibt drei einfache Möglichkeiten, dieses Problem zu lösen, indem Sie REPLACE, INSERT IGNORE oder INSERT ... ON DUPLICATE KEY UPDATE verwenden.

Zuerst stellen wir uns vor, wir hätten eine Tabelle Person, die als solche strukturiert ist:

CREATE TABLE person (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
address VARCHAR(128) 
);

Mit den folgenden existierenden Datensätzen:

id name age address
1 John Doe 27 New York, New York
2 Jane Doe 26 Berlin, Germany
3 Chun Li 24 Beijing, China
4 Thor Odinson 40 Asgard

Kommen wir nun zu den eigentlichen Lösungen.

Verwenden Sie REPLACE, um einzufügen, falls in MySQL nicht vorhanden

Was REPLACE macht, ist, dass es vorhandene Datensätze überschreibt, wenn es gefunden wird; wenn es noch nicht existiert, fügt es eine neue Zeile ein. Es ist im wesentlichen wie UPDATE, aber mit INSERT Fähigkeiten.

Lassen Sie uns eine Beispielanfrage zur Ausführung von REPLACE in John Doe bereitstellen.

REPLACE INTO 'person'
SET id = 1,
name = 'John Doe'`,
age = 28,
address = 'Los Angeles, California'

Wenn John Doe existiert, wird er mit den neuen Daten überschrieben; wenn er nicht existiert, wird ein neuer Eintrag für John Doe erstellt.

Diese Methode ist jedoch für das Einfügen nicht effizient, da sie vorhandene Datensätze überschreibt, anstatt sie einfach zu überspringen, wenn sie gefunden wird. Obwohl es die Arbeit erledigt, ist es nicht der beste Weg, dies zu tun.

Das neue Ergebnis bei der Auswahl von John Doe wird als solches angezeigt:

id name age address
1 John Doe 28 Los Angeles, California

Das Alter und die Adresse von John Doe wurden durch das REPLACE-Skript geändert oder aktualisiert.

Verwenden Sie INSERT IGNORE zum Einfügen, falls in MySQL nicht vorhanden

Wir werden dafür ebenfalls die gleichen unbearbeiteten Daten aus der obigen Tabelle verwenden.

Wenn der Primärschlüssel des Datensatzes bei INSERT IGNORE bereits in der Datenbank vorhanden ist, wird er stillschweigend ignoriert oder übersprungen.

Wenn wir das Schlüsselwort IGNORE wegnehmen, bricht das Einfügen eines Datensatzes, bei dem eine Id oder ein Primärschlüssel vorhanden ist, die Abfrage ab und zeigt eine Fehlermeldung an, die besagt, dass der Datensatz mit dem Primärschlüssel bereits existiert.

Nach dem INSERT ist das IGNORE ein Ersatz für den Abbruch wegen des Fehlers und setzt stattdessen einfach die Abfrage fort, ohne einen neuen Datensatz einzufügen.

INSERT IGNORE person
SET 'id' = 4,
age = 1000,
address = 'Chicago'

Basierend auf der Tabelle, die wir oben erklärt haben, existiert bereits ein Datensatz mit einer ID oder einem Primärschlüssel 4 (Thor Odinson). Daher wird diese Abfrage vom Skript ignoriert und somit ein Datensatz in der Datenbank nicht aktualisiert oder eingefügt.

Das Ergebnis, wenn wir Thor in Person abfragen, wäre

id name age address
4 Thor Odinson 40 Asgard

Das Alter und die Adresse in der Abfrage hatten keinen Einfluss auf die Zeile mit der id 4 überhaupt nicht.

Verwenden Sie INSERT ... ON DUPLICATE KEY UPDATE zum Einfügen, falls in MySQL nicht vorhanden

Wenn Sie die ON DUPLICATE KEY UPDATE-Klausel verwenden und die Zeile, die Sie einfügen möchten, ein Duplikat in einem UNIQUE-Index oder Primärschlüssel wäre, wird die Zeile ein UPDATE ausführen.

Dies macht im wesentlichen das gleiche, was REPLACE macht.

Nehmen wir an, wir wollen einen Datensatz mit id 2 einfügen

INSERT INTO person (id, name, age, address)
VALUES (1, 'Jane Deer', '33', 'Tallahassee Florida')
ON DUPLICATE KEY UPDATE id = id+1;

Die id wird inkrementiert, um einen neuen Datensatz zu erzeugen, anstatt den bestehenden zu aktualisieren.

Wenn wir alle Zeilen von Person abfragen, würde dies dann zu diesem Ergebnis führen:

id name age address
1 John Doe 27 New York, New York
2 Jane Doe 26 Berlin, Germany
3 Chun Li 24 Beijing, China
4 Thor Odinson 40 Asgard
5 Jane Deer 33 Tallahasee, Florida

Jane Deer wird, anstatt Jane Doe zu ersetzen, als neuer Datensatz in der Tabelle hinzugefügt.

Der effizienteste Weg, mit dem Einfügen und der Überprüfung seiner Existenz umzugehen, ist definitiv die Verwendung von INSERT IGNORE.

Die beiden anderen Schlüsselwörter sind jedoch auch von Fall zu Fall verwendbar. Wenn Sie jemals aktualisieren wollen, wenn eine Zeile, die Sie einfügen wollen, existiert, verwenden Sie REPLACE. Wenn Sie nicht wollen, dass die Zeile geändert wird, aber wirklich den neuen Datensatz einfügen wollen, benutzen Sie INSERT ... ON DUPLICATE KEY UPDATE.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn