Rumah > pangkalan data > tutorial mysql > Bagaimana untuk menguatkuasakan kekangan yang unik pada pelbagai lajur dalam SQL Server?

Bagaimana untuk menguatkuasakan kekangan yang unik pada pelbagai lajur dalam SQL Server?

Linda Hamilton
Lepaskan: 2025-01-24 23:37:12
asal
391 orang telah melayarinya

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

Kekangan unik pelbagai lajur dalam SQL Server

Pastikan gabungan unik pelbagai lajur adalah penting untuk mengekalkan integriti data. Dalam SQL Server, anda boleh mencapai tujuan ini dengan mencapai kekangan yang unik atau indeks unik pada lajur yang ditentukan.

Permintaan untuk satu -satunya kekangan

Contoh yang disediakan oleh menekankan keunikan personnumber dan kombinasi medan aktif dalam jadual orang. Ini boleh menghalang pelbagai orang memasukkan beberapa kali, yang masing -masing dibenarkan hanya satu rekod.

Tambah kekangan yang unik

Untuk menguatkuasakan had ini, anda boleh menggunakan sintaks berikut untuk menambah kekangan yang unik:

atau, anda boleh membuat indeks unik:

<code class="language-sql">ALTER TABLE dbo.yourtablename ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);</code>
Salin selepas log masuk
Kedua -dua kaedah mempunyai tujuan yang sama, iaitu, rekod berulang dilarang mengikut gabungan lajur tertentu.

Mengekalkan kecekapan
<code class="language-sql">CREATE UNIQUE INDEX uq_yourtablename ON dbo.yourtablename(column1, column2);</code>
Salin selepas log masuk

Apabila kekangan yang unik dilaksanakan, adalah perlu untuk menimbang kesan prestasi. Walaupun mereka memastikan integriti data, jika mereka sering melanggar kekangan, mereka juga boleh membawa kepada perbelanjaan operasi sisipan. Dalam kes ini, pertimbangkan untuk menggunakan bukannya pencetus untuk memintas dan mencegah pelaksanaan dari penyisipan tidak sah.

ingat, jika pencetus menghalang operasi penyisipan, sila berikan maklum balas kepada pengguna untuk mengelakkan ketidakpastian yang berpotensi.

Contoh

<code class="language-sql">CREATE TRIGGER dbo.BlockDuplicatesYourTable ON dbo.YourTable INSTEAD OF INSERT AS
BEGIN
  SET NOCOUNT ON;

  IF NOT EXISTS (SELECT 1 FROM inserted AS i 
    INNER JOIN dbo.YourTable AS t
    ON i.column1 = t.column1
    AND i.column2 = t.column2
  )
  BEGIN
    INSERT dbo.YourTable(column1, column2, ...)
      SELECT column1, column2, ... FROM inserted;
  END
  ELSE
  BEGIN
    PRINT '插入操作被阻止,因为该组合已存在。'; -- 提供用户反馈
  END
END
GO</code>
Salin selepas log masuk

Penggunaan penyelesaian ini kepada contoh yang disediakan akan mendapat struktur jadual berikut:

kini dilarang memasukkan rekod berulang berdasarkan gabungan personnumber dan aktif, seperti yang ditunjukkan dalam contoh berikut:

Atas ialah kandungan terperinci Bagaimana untuk menguatkuasakan kekangan yang unik pada pelbagai lajur dalam SQL Server?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan