Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengendalikan Pelbagai Sasaran Konflik dalam Klausa ON CONFLICT PostgreSQL?

Bagaimana untuk Mengendalikan Pelbagai Sasaran Konflik dalam Klausa ON CONFLICT PostgreSQL?

Mary-Kate Olsen
Lepaskan: 2025-01-12 17:44:43
asal
501 orang telah melayarinya

How to Handle Multiple Conflict Targets in PostgreSQL's ON CONFLICT Clause?

Menggunakan berbilang sasaran konflik dalam klausa ON CONFICT

Jika jadual mengandungi berbilang lajur unik dan sintaks INSERT ... ON CONFLICT ... DO UPDATE diperlukan untuk mengemas kini lajur lain sekiranya berlaku konflik, anda mesti mencipta indeks unik yang mengandungi semua lajur sasaran konflik.

Soalan:

Apabila cuba menggunakan berbilang lajur sebagai sasaran konflik dalam klausa ON CONFLICT, ralat berlaku kerana indeks unik diperlukan untuk melaksanakan pengesanan konflik. Pertimbangkan contoh berikut:

<code class="language-sql">INSERT INTO table
...
ON CONFLICT (col1, col2)
DO UPDATE
SET
....</code>
Salin selepas log masuk
Salin selepas log masuk

Penyelesaian:

Untuk menyelesaikan isu ini, buat indeks unik pada kedua-dua lajur:

<code class="language-sql">CREATE UNIQUE INDEX idx_t_col1_col2 ON table (col1, col2);</code>
Salin selepas log masuk

Selepas mencipta indeks unik, klausa ON CONFLICT boleh menentukan dua lajur sebagai sasaran konflik untuk mencapai gelagat kemas kini yang diingini sekiranya berlaku konflik:

<code class="language-sql">INSERT INTO table
...
ON CONFLICT (col1, col2)
DO UPDATE
SET
....</code>
Salin selepas log masuk
Salin selepas log masuk

Contoh:

Buat jadual dengan lajur unik id dan a dan masukkan data semasa mengendalikan konflik:

<code class="language-sql">CREATE TABLE t (id integer, a text, b text);
CREATE UNIQUE INDEX idx_t_id_a ON t (id, a);
INSERT INTO t VALUES (1, 'a', 'foo');
INSERT INTO t VALUES (1, 'a', 'bar') ON CONFLICT (id, a) DO UPDATE SET b = 'bar';</code>
Salin selepas log masuk

Jalankan pertanyaan untuk mengesahkan data yang dikemas kini:

<code class="language-sql">SELECT * FROM t;</code>
Salin selepas log masuk

Output:

<code> id | a |  b  
----+---+-----
  1 | a | bar</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Pelbagai Sasaran Konflik dalam Klausa ON CONFLICT PostgreSQL?. 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