Heim > Datenbank > MySQL-Tutorial > Wie kann ich Daten gleichzeitig in mehrere Postgres-Tabellen einfügen und dabei die Datenintegrität wahren?

Wie kann ich Daten gleichzeitig in mehrere Postgres-Tabellen einfügen und dabei die Datenintegrität wahren?

Susan Sarandon
Freigeben: 2025-01-12 14:36:41
Original
971 Leute haben es durchsucht

How can I insert data into multiple Postgres tables simultaneously while maintaining data integrity?

Daten in mehrere Tabellen gleichzeitig in PostgreSQL einfügen

Die Verwendung einer einzigen Abfrage zum Einfügen von Daten in mehrere Tabellen gewährleistet Konsistenz und Effizienz der Datenbankvorgänge. Dies kann durch die Verwendung eines datenmodifizierenden allgemeinen Tabellenausdrucks (CTE) erreicht werden, wie unten gezeigt:

CTE mithilfe von Daten ändern:

Die folgende Abfrage verwendet einen Datenänderungs-CTE, um kontinuierlich Daten in drei Tabellen einzufügen:

<code class="language-sql">WITH ins1 AS (
   INSERT INTO sample(firstname, lastname)
   VALUES ('fai55', 'shaggk')
   RETURNING id AS sample_id
   ),
ins2 AS (
   INSERT INTO sample1 (sample_id, adddetails)
   SELECT sample_id, 'ss' FROM ins1
   RETURNING user_id
   )
INSERT INTO sample2 (user_id, value)
SELECT user_id, 'ss2' FROM ins2;</code>
Nach dem Login kopieren

Jeder INSERT hängt vom vorherigen INSERT ab, um sicherzustellen, dass die richtigen Schlüssel erhalten und in nachfolgenden Einsätzen verwendet werden.

Alternativ durch Bereitstellung der vollständigen Datenzeile:

Eine bequemere Möglichkeit besteht darin, CTE zu verwenden, um die gesamte Datenzeile an einem Ort bereitzustellen:

<code class="language-sql">WITH data(firstname, lastname, adddetails, value) AS (
   VALUES                               
      ('fai55', 'shaggk', 'ss', 'ss2'),  
      ('fai56', 'XXaggk', 'xx', 'xx2')       
   )
, ins1 AS (
   INSERT INTO sample (firstname, lastname)
   SELECT firstname, lastname FROM data
   RETURNING firstname, lastname, id AS sample_id
   )
, ins2 AS (
   INSERT INTO sample1 (sample_id, adddetails)
   SELECT ins1.sample_id, d.adddetails
   FROM   data d
   JOIN   ins1 USING (firstname, lastname)
   RETURNING sample_id, user_id
   )
INSERT INTO sample2 (user_id, value)
SELECT ins2.user_id, d.value
FROM   data d
JOIN   ins1 USING (firstname, lastname)
JOIN   ins2 USING (sample_id);</code>
Nach dem Login kopieren

Diese Methode ermöglicht das Einfügen mehrerer Datenzeilen und behandelt doppelte Zeilen, indem für das erste INSERT ein anderer Wert ausgewählt wird.

Probleme mit Parallelität und eindeutigen Einschränkungen lösen:

Um potenzielle Parallelitätsprobleme zu lösen und die Datenintegrität sicherzustellen, können Sie sample-Einschränkungen in den (firstname, lastname)-Spalten der UNIQUE-Tabelle hinzufügen und die INSERT-Klausel in der ON CONFLICT-Abfrage verwenden unten, wie in der verlinkten Referenz beschrieben.

Das obige ist der detaillierte Inhalt vonWie kann ich Daten gleichzeitig in mehrere Postgres-Tabellen einfügen und dabei die Datenintegrität wahren?. 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