Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencipta Indeks Unik pada Lajur Membenarkan Nilai NULL dalam Pelayan SQL?

Bagaimanakah Saya Boleh Mencipta Indeks Unik pada Lajur Membenarkan Nilai NULL dalam Pelayan SQL?

Linda Hamilton
Linda Hamiltonasal
2025-01-04 22:57:41408semak imbas

How Can I Create a Unique Index on a Column Allowing NULL Values in SQL Server?

Mencipta Indeks Unik pada Lajur Null

Walaupun terdapat salah tanggapan umum bahawa kekangan unik tidak boleh digunakan pada lajur yang membenarkan nilai NULL, sememangnya terdapat kaedah untuk mencapai ini dalam SQL Server 2005.

Pendekatan 1: Lihat dengan Indeks Unik

Pendekatan yang disebut dalam soalan menggunakan pandangan untuk mengecualikan NULL dan mencipta indeks unik pada paparan itu. Walaupun berkesan, penyelesaian ini menambah kerumitan dan overhed prestasi.

Pendekatan 2: Indeks Tertapis (SQL Server 2008 )

Memperkenalkan SQL Server 2008, indeks yang ditapis membolehkan anda menentukan klausa WHERE apabila mencipta indeks. Ini membolehkan penciptaan indeks unik pada lajur yang mungkin mengandungi NULL.

Sintaks:

CREATE UNIQUE INDEX AK_MyTable_Column1 ON MyTable (Column1) WHERE Column1 IS NOT NULL

Pendekatan 3: Penguatkuasaan Berasaskan Pencetus

Alternatif lain ialah melaksanakan pencetus yang menyemak keunikan setiap kali baris disisipkan atau dikemas kini. Walau bagaimanapun, pencetus boleh memberi kesan kepada prestasi, terutamanya pada jadual dengan kadar kemasukan/kemas kini yang tinggi.

Pelaksanaan:

CREATE TRIGGER MyTable_TRG_Unique ON MyTable
AFTER INSERT OR UPDATE
AS
BEGIN
  IF EXISTS(SELECT 1 FROM MyTable WHERE Column1 = (SELECT Column1 FROM INSERTED))
  BEGIN
    RAISERROR('Column1 must be unique.', 16, 1); -- Handle error as needed
  END
END

Pertimbangkan kebaikan dan keburukan setiap pendekatan berdasarkan keperluan khusus dan kekangan prestasi permohonan anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Indeks Unik pada Lajur Membenarkan Nilai NULL dalam Pelayan SQL?. 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