Heim >Datenbank >MySQL-Tutorial >Wie kann ich bedingte Einfügungen in MySQL durchführen?

Wie kann ich bedingte Einfügungen in MySQL durchführen?

DDD
DDDOriginal
2024-12-25 00:03:11712Durchsuche

How Can I Perform Conditional Inserts in MySQL?

Bedingte Einfügungen in MySQL verstehen

Bedingte Einfügungsanweisungen ermöglichen es Ihnen, eine neue Zeile nur dann in eine Tabelle einzufügen, wenn bestimmte Bedingungen erfüllt sind. In MySQL gibt es keine spezielle Syntax für bedingte Einfügungen, aber Sie können das gleiche Ergebnis mit Techniken wie Unterabfragen und der MERGE-Anweisung erzielen.

Beispielszenario: Vermeidung doppelter Einfügungen

Stellen Sie sich ein Szenario vor, in dem Sie eine Tabelle namens x_table mit Spalten (Instanz, Benutzer, Element) haben. Die Instanzspalte ist eindeutig und Sie möchten das Einfügen doppelter Zeilen vermeiden, wenn ein bestimmter Benutzer bereits über ein bestimmtes Element verfügt.

Angenommen, Sie möchten die Zeile einfügen (Instanz=919191, Benutzer=123, item=456) genau dann, wenn es keine anderen Zeilen in x_table mit user=123 gibt und item=456.

Unterabfrage und Zeilenauswahl verwenden

Um dies zu erreichen, können Sie eine Unterabfrage verwenden, um zu prüfen, ob die doppelte Zeile 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)

Dual ist in dieser Aussage eine spezielle Tabelle mit nur einer Zeile (ursprünglich in Oracle zu finden und jetzt auch in MySQL verfügbar). Die Unterabfrage innerhalb der SELECT-Anweisung wählt eine einzelne Datenzeile aus, jedoch nur, wenn die Werte nicht bereits in x_table vorhanden sind.

Alternative: Verwendung der MERGE-Anweisung

MySQL Außerdem wurde in Version 8.0 eine dedizierte MERGE-Anweisung eingeführt, die eine praktische Möglichkeit bietet, bedingte Einfügungen, Aktualisierungen und Löschungen in einem einzigen Vorgang zu verarbeiten Anweisung:

MERGE INTO x_table (instance, user, item)
USING (
  SELECT 919191, 123, 456
  WHERE NOT EXISTS (SELECT * FROM x_table
                      WHERE user = 123
                        AND item = 456)
) AS new_row
ON x_table.user = new_row.user AND x_table.item = new_row.item
WHEN NOT MATCHED THEN INSERT (instance, user, item) VALUES (new_row.instance, new_row.user, new_row.item);

Die MERGE-Anweisung verwendet eine Unterabfrage ähnlich dem vorherigen Beispiel, um zu prüfen, ob die doppelte Zeile vorhanden ist. Wenn die Zeile nicht existiert (WHEN NOT MATCHED), wird eine Einfügeoperation ausgeführt.

Das obige ist der detaillierte Inhalt vonWie kann ich bedingte Einfügungen in MySQL durchführen?. 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