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
Lepaskan: 2025-01-04 00:05:39
asal
995 orang telah melayarinya

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)
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan