Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menguatkuasakan Kekangan Unik pada Lajur Boleh Nullable dalam Pelayan SQL?

Bagaimana untuk Menguatkuasakan Kekangan Unik pada Lajur Boleh Nullable dalam Pelayan SQL?

Linda Hamilton
Linda Hamiltonasal
2025-01-04 00:05:39996semak imbas

How to Enforce Unique Constraints on Nullable Columns in SQL Server?

Kekangan Unik Bukan NULL pada Lajur Boleh NULL

Selalunya wajar untuk menguatkuasakan keunikan pada lajur sambil membenarkan nilai nol. Walau bagaimanapun, mencipta indeks unik pada lajur NULLable dalam SQL Server 2005 boleh mencabar.

Penyelesaian Semasa

Satu penyelesaian biasa ialah mencipta indeks unik pada sesuatu yang terwujud. paparan yang mengecualikan nilai nol:

CREATE VIEW vw_unq WITH SCHEMABINDING AS
    SELECT Column1
      FROM MyTable
     WHERE Column1 IS NOT NULL

CREATE UNIQUE CLUSTERED INDEX unq_idx ON vw_unq (Column1)

Lebih baik Alternatif

SQL Server 2008 memperkenalkan indeks yang ditapis, yang menyediakan penyelesaian yang lebih baik:

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

Indeks ini membenarkan nilai nol sambil menguatkuasakan keunikan pada nilai bukan nol.

Pilihan Tambahan: Pencetus

Alternatif lain ialah mencipta pencetus untuk menyemak keunikan semasa operasi sisipan dan kemas kini:

CREATE TRIGGER trg_MyTable_CheckUnique ON MyTable AFTER INSERT, UPDATE
AS
BEGIN
    IF EXISTS(SELECT * FROM MyTable WHERE Column1 = NEW.Column1 AND Column1 IS NOT NULL)
    BEGIN
        RAISERROR('Duplicate value for Column1.', 16, 1)
    END
END

Walau bagaimanapun, pencetus boleh menjejaskan prestasi, terutamanya pada sistem konkurensi tinggi.

Atas ialah kandungan terperinci Bagaimana untuk Menguatkuasakan Kekangan Unik pada Lajur Boleh Nullable 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