Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menguatkuasakan Kekangan Unik Merentasi Berbilang Lajur dalam Pelayan SQL?

Bagaimana untuk Menguatkuasakan Kekangan Unik Merentasi Berbilang Lajur dalam Pelayan SQL?

DDD
Lepaskan: 2025-01-24 23:51:11
asal
389 orang telah melayarinya

How to Enforce a Unique Constraint Across Multiple Columns in SQL Server?

menguatkuasakan keunikan merentasi pelbagai lajur SQL Server

Selalunya, integriti pangkalan data memerlukan mencegah baris pendua berdasarkan nilai lajur berganda. Artikel ini menunjukkan cara menguatkuasakan kekangan yang unik di seluruh lajur

dan PersonNumber dalam jadual Active. Person

Melaksanakan kekangan unik

Setelah mengeluarkan sebarang penyertaan pendua yang sedia ada, gunakan kekangan menggunakan salah satu kaedah ini:

    Kenyataan
  • : ALTER TABLE Ini secara langsung menambah kekangan ke jadual yang sedia ada.

    <code class="language-sql">ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person_NumberActive UNIQUE (PersonNumber, Active);</code>
    Salin selepas log masuk
  • Kenyataan
  • : CREATE UNIQUE INDEX Ini mewujudkan indeks unik, yang secara tersirat menguatkuasakan kekangan keunikan.

    <code class="language-sql">CREATE UNIQUE INDEX uq_Person_NumberActive ON dbo.Person (PersonNumber, Active);</code>
    Salin selepas log masuk

Pendekatan & Pengoptimuman Alternatif

Walaupun kaedah di atas adalah berkesan, pertimbangkan peningkatan ini:

  • Prestasi: Pemeriksaan pendua proaktif Sebelum Mencuba sisipan dapat meningkatkan prestasi dengan mengelakkan pengecualian dalam blok . TRY...CATCH
  • Pencetus: pencetus INSTEAD OF membolehkan logik memasukkan bersyarat, mencegah pengecualian daripada menyebarkan ke lapisan aplikasi. Ini menawarkan mekanisme pengendalian kesilapan yang lebih mantap. INSTEAD OF
Contoh ilustrasi

Contoh ini menunjukkan kekangan yang unik dalam tindakan:

Ini memastikan bahawa hanya satu rekod yang wujud untuk setiap kombinasi unik
<code class="language-sql">-- Create the Person table
CREATE TABLE dbo.Person (
  ID INT IDENTITY(1, 1) PRIMARY KEY,
  Name NVARCHAR(32) NOT NULL,
  Active BIT NOT NULL DEFAULT 0,
  PersonNumber INT NOT NULL
);

-- Add the unique constraint
ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person_NumberActive UNIQUE (PersonNumber, Active);

-- Insert data
INSERT INTO dbo.Person (Name, Active, PersonNumber) VALUES ('John Doe', 1, 1234);
INSERT INTO dbo.Person (Name, Active, PersonNumber) VALUES ('Jane Doe', 0, 5678);

-- Attempt to insert a duplicate (this will fail)
INSERT INTO dbo.Person (Name, Active, PersonNumber) VALUES ('John Doe', 1, 1234);</code>
Salin selepas log masuk
dan

status. Sebarang percubaan untuk memasukkan pendua akan mengakibatkan ralat. Ingatlah untuk menggantikan PersonNumber dengan skema sebenar dan nama jadual anda. Active

Atas ialah kandungan terperinci Bagaimana untuk Menguatkuasakan Kekangan Unik Merentasi Berbilang Lajur dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan