Melaksanakan Kekangan Unik Bersyarat dalam Pelayan SQL
Kekangan unik SQL Server menghalang entri pendua merentas lajur tertentu. Tetapi bagaimana anda menguatkuasakan keunikan hanya dalam keadaan tertentu? Penyelesaiannya terletak pada penggunaan indeks yang ditapis.
Menurut dokumentasi SQL Server, indeks yang ditapis ialah indeks bukan kelompok yang mengindeks hanya subset baris jadual, ditakrifkan oleh predikat penapis.
Ciri ini membolehkan anda menggabungkan indeks unik dengan penapis bersyarat untuk menguatkuasakan keunikan secara terpilih. Pertimbangkan jadual:
<code class="language-sql">Table(ID, Name, RecordStatus)</code>
Di mana RecordStatus
boleh menjadi 1 (aktif) atau 2 (dipadamkan). Untuk memastikan nilai ID
unik hanya apabila RecordStatus
ialah 1, anda akan membuat indeks yang ditapis:
<code class="language-sql">CREATE UNIQUE INDEX MyIndex ON MyTable(ID) WHERE RecordStatus = 1;</code>
Ini menguatkuasakan keunikan pada ID
hanya untuk rekod aktif (di mana RecordStatus = 1
). Percubaan untuk memasukkan pendua ID
dengan RecordStatus = 1
akan mengakibatkan ralat:
<code>Cannot insert duplicate key row in object 'MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>
Adalah penting untuk diingat bahawa indeks yang ditapis telah diperkenalkan dalam SQL Server 2008. Untuk versi terdahulu (seperti SQL Server 2005), pendekatan alternatif seperti pencetus diperlukan untuk mencapai keunikan bersyarat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguatkuasakan Keunikan Bersyarat dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!