Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Memasukkan Data ke dalam Tiga Jadual Postgres Secara Serentak Menggunakan Pertanyaan Tunggal?
Andaikan anda perlu memasukkan data ke dalam tiga jadual serentak menggunakan satu pertanyaan. Struktur jadual adalah seperti berikut:
<code class="language-sql">CREATE TABLE sample ( id bigserial PRIMARY KEY, lastname varchar(20), firstname varchar(20) ); CREATE TABLE sample1( user_id bigserial PRIMARY KEY, sample_id bigint REFERENCES sample, adddetails varchar(20) ); CREATE TABLE sample2( id bigserial PRIMARY KEY, user_id bigint REFERENCES sample1, value varchar(10) );</code>
Anda perlu memastikan kunci utama untuk setiap sisipan dan kemudian gunakannya dalam jadual berikutnya. Walau bagaimanapun, melaksanakan satu pertanyaan untuk setiap sisipan tidak membenarkan penggunaan semula nilai kunci dengan serta-merta.
Untuk memasukkan data ke dalam tiga jadual secara serentak, anda boleh menggunakan pengubahsuaian data CTE (Common Table Expression). Mereka mewujudkan kebergantungan antara sisipan berturut-turut:
<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>
CTE pertama, ins1, memasukkan ke dalam jadual sampel dan mengembalikan kunci yang dijana (sample_id). Kemudian, ins2 memasukkan ke dalam sample1 menggunakan sample_id daripada ins1 dan mengembalikan user_id. Akhir sekali, INSERT ketiga memasukkan ke dalam sample2 menggunakan user_id.
Lazimnya lebih cekap untuk mentakrifkan baris data dalam CTE terlebih dahulu:
<code class="language-sql">WITH data(firstname, lastname, adddetails, value) AS ( VALUES ('fai55', 'shaggk', 'ss', 'ss2'), ('fai56', 'XXaggk', 'xx', 'xx2') ) ... -- (查询的其余部分保持不变)</code>
Ingat untuk mempertimbangkan faktor seperti kekangan keunikan, penukaran jenis dan pengendalian penulisan serentak untuk memastikan integriti data.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memasukkan Data ke dalam Tiga Jadual Postgres Secara Serentak Menggunakan Pertanyaan Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!