Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencipta Kekangan Unik pada Lajur Meja Hanya Apabila Syarat Khusus Dipenuhi?
Selalunya, reka bentuk pangkalan data memerlukan kekangan unik pada lajur jadual, tetapi hanya dalam keadaan tertentu. Mari kita gambarkan ini dengan contoh:
Pertimbangkan jadual Table
dengan lajur ID
, Name
dan RecordStatus
. RecordStatus
boleh jadi 1 (aktif) atau 2 (dipadamkan). Matlamatnya adalah untuk menguatkuasakan keunikan pada lajur ID
hanya untuk rekod aktif (di mana RecordStatus
= 1), membenarkan pendua untuk rekod yang dipadamkan.
Walaupun pencetus boleh mencapai matlamat ini, penyelesaian yang lebih cekap dan mantap ialah menggunakan indeks yang ditapis.
Indeks yang ditapis membuat indeks pada subset data jadual, ditakrifkan oleh keadaan penapis. Ini membolehkan kawalan tepat ke atas pengindeksan, sesuai untuk kekangan kunci utama atau unik bersyarat.
Untuk menguatkuasakan keunikan pada ID
hanya apabila RecordStatus
ialah 1, gunakan arahan ini:
<code class="language-sql">CREATE UNIQUE INDEX MyIndex ON MyTable(ID) WHERE RecordStatus = 1;</code>
Ini mencipta indeks unik pada lajur ID
, tetapi hanya mempertimbangkan baris yang RecordStatus
sama dengan 1.
Percubaan untuk memasukkan nilai ID
pendua dengan RecordStatus
= 1 akan mengakibatkan ralat, serupa dengan ini:
<code>Msg 2601, Level 14, State 1, Line 13 Cannot insert duplicate key row in object 'dbo.MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>
Indeks yang ditapis menawarkan pendekatan yang bersih dan cekap untuk mencipta kekangan unik bersyarat. Mereka meningkatkan integriti data tanpa overhed prestasi yang sering dikaitkan dengan pencetus, menyediakan penyelesaian yang lebih berskala dan boleh diselenggara untuk keperluan pangkalan data yang kompleks. Dengan mentakrifkan keadaan penapis dengan tepat, anda boleh menguatkuasakan keunikan secara selektif, menjajarkan dengan sempurna peraturan perniagaan tertentu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Kekangan Unik pada Lajur Meja Hanya Apabila Syarat Khusus Dipenuhi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!