Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencipta Kekangan Unik pada Lajur Meja Hanya Apabila Syarat Khusus Dipenuhi?

Bagaimanakah Saya Boleh Mencipta Kekangan Unik pada Lajur Meja Hanya Apabila Syarat Khusus Dipenuhi?

DDD
DDDasal
2025-01-10 10:44:43295semak imbas

How Can I Create a Unique Constraint on a Table Column Only When a Specific Condition is Met?

Melaksanakan Keunikan Bersyarat: Alternatif Unggul kepada Pencetus

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.

Kenapa Elakkan Pencetus?

Walaupun pencetus boleh mencapai matlamat ini, penyelesaian yang lebih cekap dan mantap ialah menggunakan indeks yang ditapis.

Kuasa Indeks 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.

Mewujudkan Kekangan 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.

Gelagat Jangkaan

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>

Ringkasan

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!

Kenyataan:
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