Heim >Datenbank >MySQL-Tutorial >Wie kann ich UPSERT-Operationen mit mehreren Spalten in SQL effizient durchführen?
UPSERT mit mehreren Spalten unter Verwendung von INSERT...ON DUPLICATE KEY UPDATE ausführen
Um eine UPSERT-Operation auszuführen (neue Zeilen einfügen oder vorhandene aktualisieren). Zeilen), während im Aktualisierungsteil sowohl neue als auch vorhandene Werte berücksichtigt werden, wird häufig die Anweisung INSERT...ON DUPLICATE KEY UPDATE verwendet. Mit dieser Technik können Sie verschiedene Szenarien behandeln, je nachdem, ob ein Datensatz mit dem angegebenen Primärschlüssel vorhanden ist oder nicht.
Einfaches Beispiel
Stellen Sie sich eine Tabelle mit dem Namen „Item“ und den Spalten „Item_Name“ vor (Primärschlüssel) und Items_In_Stock mit Bestandszählungen. Beim Empfang eines Artikels gilt die folgende Logik:
Ein naiver Ansatz würde die Verwendung mehrerer SELECT-Anweisungen im UPDATE-Teil beinhalten, um die vorhandene Anzahl wiederherzustellen im folgenden Beispiel:
INSERT INTO `item` (`item_name`, items_in_stock) VALUES('A', 27) ON DUPLICATE KEY UPDATE `new_items_count` = 27 + (SELECT items_in_stock where item_name = 'A')
Verbesserte Lösung
Dieser Ansatz kann jedoch unnötig komplex sein. Mit PostgreSQL können Sie direkt in der UPDATE-Klausel auf die Werte der Zeile verweisen, die die ON DUPLICATE KEY-Bedingung ausgelöst hat. Daher können Sie die Anweisung wie folgt vereinfachen:
INSERT INTO `item` (`item_name`, items_in_stock) VALUES( 'A', 27) ON DUPLICATE KEY UPDATE `new_items_count` = `new_items_count` + 27
Diese optimierte Anweisung vermeidet den Aufwand zusätzlicher SELECT-Abfragen und hält den Code prägnanter und eleganter.
Das obige ist der detaillierte Inhalt vonWie kann ich UPSERT-Operationen mit mehreren Spalten in SQL effizient durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!