Fasal ON CONFLICT
PostgreSQL: Mengurus Konflik Merentasi Berbilang Lajur Unik
Klausa ON CONFLICT
PostgreSQL yang berkuasa memudahkan pengendalian sisipan baris pendua, membenarkan kemas kini dan bukannya ralat. Timbul persoalan utama: bolehkah klausa ini mengurus konflik yang melibatkan berbilang lajur yang diindeks secara unik?
Keperluan untuk mengemas kini lajur tambahan apabila konflik berlaku merentas berbilang lajur unik memerlukan penyelesaian melangkaui sasaran konflik satu lajur. Penyelesaiannya terletak pada mentakrifkan indeks unik komposit yang merangkumi lajur yang berkaitan.
Begini cara ia berfungsi: Katakan kita mempunyai jadual dengan kekangan unik pada kedua-dua id
dan name
:
<code class="language-sql">CREATE TABLE test (id INT, name TEXT, UNIQUE (id), UNIQUE (name));</code>
Perhatikan bahawa mencipta indeks unik yang berasingan pada id
dan name
secara fungsinya setara dengan mencipta satu kekangan unik UNIQUE (id, name)
. Untuk mengendalikan konflik berdasarkan sama ada id
atau name
(atau kedua-duanya), kami menggunakan indeks komposit dalam klausa ON CONFLICT
:
<code class="language-sql">INSERT INTO test (id, name) ON CONFLICT (id, name) DO UPDATE SET ...;</code>
Pendekatan ini membolehkan pangkalan data mengenal pasti konflik dengan cekap berdasarkan nilai gabungan id
dan name
, mencetuskan tindakan DO UPDATE
seperti yang diperlukan.
Yang penting, klausa ON CONFLICT
bergantung pada kewujudan kekangan (atau indeks) unik yang meliputi semua lajur sasaran konflik yang ditentukan. Percubaan untuk menggunakan ON CONFLICT
tanpa kekangan sedemikian akan mengakibatkan ralat pangkalan data.
Atas ialah kandungan terperinci Bolehkah Klausa ON CONFLICT PostgreSQL Mengendalikan Berbilang Lajur Berindeks Unik sebagai Sasaran Konflik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!