Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengendalikan Pelbagai Sasaran Konflik dalam Klausa ON CONFLICT PostgreSQL?
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>
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>
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>
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>
Jalankan pertanyaan untuk mengesahkan data yang dikemas kini:
<code class="language-sql">SELECT * FROM t;</code>
Output:
<code> id | a | b ----+---+----- 1 | a | bar</code>
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!