Heim >Datenbank >MySQL-Tutorial >Wie kann ich UPSERT-Operationen mit mehreren Spalten in SQL effizient durchführen?

Wie kann ich UPSERT-Operationen mit mehreren Spalten in SQL effizient durchführen?

Susan Sarandon
Susan SarandonOriginal
2024-12-10 20:29:14377Durchsuche

How Can I Efficiently Perform UPSERT Operations with Multiple Columns in SQL?

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:

  • Wenn der Artikel nicht vorhanden ist, fügen Sie einen neuen Datensatz mit der angegebenen Menge ein.
  • Wenn der Artikel vorhanden ist, aktualisieren Sie die Spalte „Items_In_Stock“. durch Addieren der neuen Menge zum vorhandenen Wert.

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!

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