Heim >Datenbank >MySQL-Tutorial >Wie kann ich Daten gleichzeitig in mehrere Postgres-Tabellen einfügen und dabei die Datenintegrität wahren?
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>
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>
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!