Heim >Datenbank >MySQL-Tutorial >Wie führe ich bedingte Einfügungen in MySQL durch?

Wie führe ich bedingte Einfügungen in MySQL durch?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-26 20:41:10512Durchsuche

How to Perform Conditional Inserts in MySQL?

Bedingte Einfügungen in MySQL erreichen

Bedingte Einfügungen können in MySQL eine Herausforderung darstellen, da es keine spezifischen Schlüsselwörter für diesen Zweck gibt. Daher müssen alternative Ansätze verwendet werden.

Ansatz mithilfe einer Unterabfrage:

Eine effektive Lösung besteht darin, eine Unterabfrage zu verwenden, um nach vorhandenen Zeilen mit übereinstimmenden Kriterien zu suchen. Die folgende Abfrage fügt nur dann eine neue Zeile in die x_table ein, wenn keine Zeile mit denselben Benutzer- und Elementwerten vorhanden ist:

INSERT INTO x_table(instance, user, item)
SELECT 919191, 123, 456
FROM dual
WHERE NOT EXISTS (SELECT * FROM x_table WHERE user = 123 AND item = 456);

Die Unterabfrage stellt sicher, dass die INSERT-Anweisung nur ausgeführt wird, wenn die Bedingung erfüllt ist. dual ist eine einzeilige Tabelle, die eine praktische Quelle für die SELECT-Anweisung bietet.

Alternativer Ansatz mit MERGE:

Eine weitere Option für bedingte Einfügungen ist die Verwendung von MERGE Stellungnahme. Die MERGE-Anweisung ermöglicht sowohl das Einfügen als auch das Aktualisieren in einem einzigen Vorgang. Die folgende Abfrage fügt eine neue Zeile in die x_table ein, wenn diese noch nicht vorhanden ist. Andernfalls wird die vorhandene Zeile aktualisiert:

MERGE INTO x_table AS target
USING (
  SELECT 919191 AS instance, 123 AS user, 456 AS item
) AS source
ON target.user = source.user AND target.item = source.item
WHEN NOT MATCHED THEN INSERT (instance, user, item) VALUES (source.instance, source.user, source.item)
WHEN MATCHED THEN UPDATE SET instance = source.instance;

Bei diesem Ansatz prüft die MERGE-Anweisung zunächst, ob eine vorhandene Zeile mit Übereinstimmung vorhanden ist Benutzer- und Artikelwerte. Wenn keine Übereinstimmung gefunden wird, wird eine neue Zeile mit den Daten aus der Quellunterabfrage eingefügt. Wenn eine Übereinstimmung gefunden wird, wird der Instanzwert aktualisiert.

Das obige ist der detaillierte Inhalt vonWie führe ich bedingte Einfügungen in MySQL durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn