Rumah >pangkalan data >tutorial mysql >Bagaimanakah CTE PostgreSQL Boleh Mengendalikan Berbilang INSERT dengan Cekap dengan RETURNING untuk Kemas Kini Berbilang Jadual?

Bagaimanakah CTE PostgreSQL Boleh Mengendalikan Berbilang INSERT dengan Cekap dengan RETURNING untuk Kemas Kini Berbilang Jadual?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-02 14:05:40945semak imbas

How Can PostgreSQL's CTEs Efficiently Handle Multiple INSERTs with RETURNING for Multi-Table Updates?

Berbilang INSERT...RETURNING untuk Kemas Kini Berbilang Jadual dalam PostgreSQL

Memasukkan data ke dalam berbilang jadual anak sambil merujuk data yang baru dimasukkan daripada jadual induk boleh menjadi tugas yang mencabar. Dalam konteks ini, PostgreSQL menyediakan penyelesaian yang berkuasa menggunakan ungkapan jadual biasa (CTEs) yang mengubah suai data.

Pada mulanya, kami boleh mendapatkan user_id bagi baris yang baru dimasukkan dalam jadual induk menggunakan klausa RETURNING:

INSERT INTO table1 (default,'johnee','john','smith',default) RETURNING userid;

Untuk melaksanakan berbilang INSERT, kami boleh menggunakan CTE pengubahsuai data sebagai berikut:

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
   )
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM ins1
RETURNING user_id;

Dalam kod ini, ins1 CTE melaksanakan INSERT ke dalam jadual1 dan mengembalikan user_id. CTE ins2 kemudian menggunakan user_id daripada ins1 untuk memasukkan data ke dalam jadual2. Akhir sekali, INSERT ketiga menggunakan user_id daripada ins1 untuk memasukkan data ke dalam jadual3, secara pilihan mengembalikan user_id yang terhasil.

Dengan menggunakan CTE pengubahsuai data, kami boleh merantai berbilang INSERT dengan cekap dan memastikan data yang baru dimasukkan dalam anak jadual mengekalkan perhubungan yang diperlukan dengan jadual induk.

Atas ialah kandungan terperinci Bagaimanakah CTE PostgreSQL Boleh Mengendalikan Berbilang INSERT dengan Cekap dengan RETURNING untuk Kemas Kini Berbilang Jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn