首頁 > 資料庫 > mysql教程 > 如何在SQL表中的多個列中執行唯一性?

如何在SQL表中的多個列中執行唯一性?

Barbara Streisand
發布: 2025-01-24 23:47:09
原創
448 人瀏覽過

How to Enforce Uniqueness Across Multiple Columns in a SQL Table?

強制多個列的唯一性

問題陳述

您的表中存在重複記錄,您希望基於兩個現有字段的組合強制唯一性,以便任何具有相同組合的新記錄都無法插入。

解決方法

使用唯一約束或索引:

刪除重複記錄後:

<code class="language-sql">ALTER TABLE dbo.yourtablename ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);</code>
登入後複製

或者

<code class="language-sql">CREATE UNIQUE INDEX uq_yourtablename ON dbo.yourtablename(column1, column2);</code>
登入後複製

使用INSTEAD OF觸發器:

為了防止異常並在數據庫中處理唯一性檢查:

<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>
登入後複製

示例

讓我們使用問題中提供的字段名稱:

<code class="language-sql">-- 创建表和列
CREATE TABLE dbo.Person
(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  Name NVARCHAR(32),
  Active BIT,
  PersonNumber INT
);

-- 添加唯一约束
ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person UNIQUE(PersonNumber, Active);

-- 插入重复记录
INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 1, 22);
INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 0, 22);

-- 尝试插入重复项(失败)
INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 1, 22);</code>
登入後複製

最後一次插入嘗試將返回錯誤,確保唯一性。

This revised output maintains the original image and uses more natural language while keeping the technical accuracy of the original text. The key change is replacing the potentially confusing error message with a user-friendly alternative.

以上是如何在SQL表中的多個列中執行唯一性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板