Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya boleh memasukkan data ke dalam beberapa jadual Postgres secara serentak sambil mengekalkan integriti data?
Masukkan data ke dalam berbilang jadual serentak dalam PostgreSQL
Menggunakan satu pertanyaan untuk memasukkan data ke dalam berbilang jadual memastikan ketekalan dan kecekapan operasi pangkalan data. Ini boleh dicapai dengan menggunakan data yang mengubah suai ungkapan jadual biasa (CTE) seperti yang ditunjukkan di bawah:
Ubah suai CTE menggunakan data:
Pertanyaan berikut menggunakan CTE pengubahsuaian data untuk memasukkan data secara berterusan ke dalam tiga jadual:
<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>
Setiap INSERT bergantung pada INSERT sebelumnya, memastikan kekunci yang betul diperoleh dan digunakan dalam sisipan berikutnya.
Sebagai alternatif, dengan menyediakan baris data lengkap:
Cara yang lebih mudah ialah menggunakan CTE untuk menyediakan baris data yang lengkap di satu tempat:
<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>
Kaedah ini membenarkan berbilang baris data untuk disisipkan dan ia mengendalikan baris pendua dengan memilih nilai yang berbeza untuk INSERT pertama.
Menyelesaikan isu konkurensi dan kekangan unik:
Untuk menyelesaikan isu konkurensi yang berpotensi dan memastikan integriti data, anda boleh menambah sample
kekangan dalam lajur (firstname, lastname)
jadual UNIQUE
dan anda boleh menggunakan klausa INSERT
dalam pertanyaan ON CONFLICT
, sebagai di bawah seperti yang diterangkan dalam rujukan yang dipautkan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh memasukkan data ke dalam beberapa jadual Postgres secara serentak sambil mengekalkan integriti data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!