Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memasukkan Data Secara Berurutan ke dalam Jadual Berbilang Postgres Menggunakan CTE atau Jadual Sementara?

Bagaimanakah Saya Boleh Memasukkan Data Secara Berurutan ke dalam Jadual Berbilang Postgres Menggunakan CTE atau Jadual Sementara?

Patricia Arquette
Lepaskan: 2025-01-12 14:35:47
asal
715 orang telah melayarinya

How Can I Sequentially Insert Data into Multiple Postgres Tables Using CTEs or a Temporary Table?

Menggunakan Postgres CTE untuk memasukkan data secara berurutan dalam berbilang jadual

Dalam Postgres, anda boleh menggunakan data mengubah suai ungkapan jadual biasa (CTE) untuk memasukkan data ke dalam berbilang jadual dengan satu pertanyaan. CTE menyediakan cara yang mudah untuk menentukan set hasil sementara dan memanipulasi data dalam satu pertanyaan.

Gunakan data untuk mengubah suai CTE

Pertanyaan berikut menunjukkan cara menggunakan CTE untuk memasukkan data secara berurutan 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>
Salin selepas log masuk

Dalam pertanyaan ini:

  • CTE pertama, ins1, memasukkan baris ke dalam jadual sample dan mengembalikan ID baris yang disisipkan sebagai sample_id.
  • CTE kedua, ins2, menggunakan ins1 yang dikembalikan oleh sample_id untuk memasukkan baris ke dalam jadual sample1. Ia mengembalikan user_id baris yang disisipkan.
  • Pernyataan INSERT akhir menyisipkan baris ke dalam jadual ins2 menggunakan user_id yang dikembalikan oleh sample2.

Pendekatan ini membolehkan anda merantai berbilang INSERT pernyataan dan menggunakan semula nilai yang dikembalikan daripada sisipan sebelumnya.

Mengendalikan penulisan serentak

Jika berbilang sesi memasukkan data pada masa yang sama, anda mesti mempertimbangkan kemungkinan penulisan serentak. Untuk melakukan ini, anda boleh menggunakan klausa ON CONFLICT untuk menentukan tingkah laku apabila cuba memasukkan rekod pendua.

Alternatif menggunakan jadual sementara

Sebagai alternatif kepada menggunakan CTE, anda juga boleh membuat jadual sementara untuk menyimpan data perantaraan dan kemudian melakukan sisipan secara berurutan:

<code class="language-sql">CREATE TEMP TABLE tmp AS SELECT * FROM sample;
INSERT INTO sample1 (sample_id, adddetails) SELECT id, 'ss' FROM tmp;
INSERT INTO sample2 (user_id, value) SELECT user_id, 'ss2' FROM tmp;
DROP TABLE tmp;</code>
Salin selepas log masuk

Pendekatan ini melibatkan penggunaan jadual sementara sebagai sumber data untuk sisipan berikutnya tanpa memautkan CTE secara langsung.

Dengan menggunakan CTE pengubahsuaian data atau jadual sementara, anda boleh memasukkan data ke dalam berbilang jadual dengan cekap dengan satu pertanyaan Postgres, sekali gus memudahkan operasi pemasukan data.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memasukkan Data Secara Berurutan ke dalam Jadual Berbilang Postgres Menggunakan CTE atau Jadual Sementara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan