Heim >Datenbank >MySQL-Tutorial >Wie kann ich bedingte Einfügungen in MySQL durchführen?
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!