Schreiben#

INSERT#

Das Einfügen von Daten in Couchbase mit SQL++ erfolgt mit der INSERT-Abfrage. Die INSERT-Abfrage benötigt zwei Argumente:

  1. Der Name der Collection, in die die Daten einzufügen sind.

  2. Die Liste der einzufügenden Werte.

Die einzufügenden Werte müssen als JSON-Objekt dargestellt werden. Ein JSON-Objekt kann eine beliebige Anzahl von Feldern enthalten.

Die folgende Abfrage fügt beispielsweise Daten zu drei Angeboten in die Angebotscollection ein:

INSERT INTO Angebot VALUES (
  2,
  "P13",
  "2023-07-01",
  "Augsburg"
);

INSERT INTO Angebot VALUES (
  1,
  "I09",
  "2023-03-27",
  "Mindelheim"
);

INSERT INTO Angebot VALUES (
  2,
  "I09",
  "2023-04-23",
  "Muenchen"
);

UPSERT#

Die UPSERT-Anweisung wird verwendet, um neue Daten in eine Collection einzufügen, wenn kein Dokument mit dem angegebenen Schlüssel vorhanden ist. Wenn ein Dokument mit dem angegebenen Schlüssel vorhanden ist, werden seine Werte mit den neuen Werten aktualisiert.

UPSERT INTO offer (KEY, VALUE) VALUES (
  "1-G08",
  {
    "date": "2023-10-13",
    "city": "Wedel"
  }
);

Diese Abfrage fügt Angebotsdaten mit dem Schlüssel 1-G08 und den Werten 13.10.2023 und Wedel ein, wenn in der Angebotscollection kein Dokument mit dem Schlüssel 1-G08 vorhanden ist. Wenn ein Dokument mit dem Schlüssel 1-G08 vorhanden ist, werden dessen Werte mit den neuen Werten aktualisiert.

Vergleich von INSERT- und UPSERT-Anweisungen#

Der Hauptunterschied zwischen INSERT- und UPSERT-Anweisungen besteht darin, dass die INSERT-Anweisung immer ein neues Dokument erstellt, während die UPSERT-Anweisung ein vorhandenes Dokument aktualisieren kann, sofern eines vorhanden ist.

In den obigen Beispielen wird die INSERT-Anweisung verwendet, um neue Daten in die Angebots- und Angebotscollections einzufügen, da es in diesen Collections keine Dokumente mit diesen Schlüsseln gibt. Die UPSERT-Anweisung wird verwendet, um Daten in die Angebotscollection einzufügen, wenn in dieser Collection kein Dokument mit dem Schlüssel 1-G08 vorhanden ist. Wenn ein Dokument mit dem Schlüssel 1-G08 vorhanden ist, werden dessen Werte mit den neuen Werten aktualisiert.

Im Allgemeinen ist die INSERT-Anweisung eine einfachere und klarere Anweisung, sie ist jedoch weniger effizient als die UPSERT-Anweisung. Die UPSERT-Anweisung kann effizienter sein, da sie die Erstellung eines neuen Dokuments vermeiden kann, wenn bereits ein Dokument mit dem angegebenen Schlüssel vorhanden ist.