Heim > Datenbank > MySQL-Tutorial > Wie können PostgreSQL-CTEs effizient mehrere Zeilen in mehrere Tabellen einfügen?

Wie können PostgreSQL-CTEs effizient mehrere Zeilen in mehrere Tabellen einfügen?

Linda Hamilton
Freigeben: 2025-01-01 13:23:12
Original
831 Leute haben es durchsucht

How Can PostgreSQL CTEs Efficiently Insert Multiple Rows Across Multiple Tables?

Einfügen mehrerer Zeilen mit den CTEs von PostgreSQL

Angenommen, Sie haben eine relationale Datenbank mit drei Tabellen: Tabelle1, Tabelle2 und Tabelle3. Tabelle 1 enthält allgemeine Benutzerinformationen, während die Tabellen 2 und 3 zusätzliche Daten wie Passwörter und Adressen enthalten. Wenn Sie einen neuen Benutzer in Tabelle 1 hinzufügen, möchten Sie gleichzeitig die Benutzer-ID und andere eindeutige Daten in die untergeordneten Tabellen Tabelle 2 und Tabelle 3 einfügen.

Postgres 9.3 bietet datenmodifizierende CTEs eine Lösung für dieses Szenario. Mit CTEs können Sie mehrere INSERT-Vorgänge effizient verketten.

So verwenden Sie datenmodifizierende CTEs, um Ihre Aufgabe zu erfüllen:

WITH ins1 AS (
    INSERT INTO table1 (username, name, surname)
    VALUES ('johnee', 'john', 'smith')
    RETURNING user_id
),
ins2 AS (
    INSERT INTO table2 (user_id, password)
    SELECT ins1.user_id, 'secret'
    FROM ins1
    -- Nothing to return here
)
INSERT INTO table3 (user_id, address, city, phone)
SELECT ins1.user_id, ..., ...
FROM ins1
RETURNING user_id;
Nach dem Login kopieren

Aufschlüsselung des CTE:

  • ins1 CTE: Fügt eine neue Zeile ein in Tabelle1 und gibt die neu erstellte Benutzer-ID zurück.
  • ins2 CTE: Verwendet die Benutzer-ID von ins1, um Daten in Tabelle2 einzufügen. Da kein Wert zurückgegeben werden muss, wird er weggelassen.
  • Final INSERT: Fügt Daten in Tabelle3 ein, indem die Benutzer-ID aus ins1 und zusätzliche Spalten verwendet werden. Sie können die gewünschten Spalten und Werte nach Bedarf angeben. Mit der optionalen RETURNING-Klausel können Sie die neu erstellte Benutzer-ID aus Tabelle 3 abrufen.

Best Practices:

  • Fügen Sie immer eine Spaltendefinitionsliste in Ihre ein INSERT-Anweisungen, um die Konsistenz mit Ihrer Tabellenstruktur sicherzustellen.
  • Wenn eine Spalte einen Standardwert erhalten soll, lassen Sie ihn einfach im INSERT weg Stellungnahme; Postgres fügt automatisch den Standardwert ein.
  • Der letzte CTE kann optional einen Wert zurückgeben, der für die weitere Verarbeitung oder zum Abrufen neu erstellter IDs nützlich sein könnte.

Das obige ist der detaillierte Inhalt vonWie können PostgreSQL-CTEs effizient mehrere Zeilen in mehrere Tabellen einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage