创建唯一约束

适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例

你可以通过使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中创建唯一约束,以便确保在未参与主键的特定列中不输入重复值。 创建唯一约束会自动创建相应的唯一索引。

注意

有关 Azure Synapse Analytics 中的唯一约束的信息,请参阅 Azure Synapse Analytics 中的主键、外键和唯一键

权限

需要对表的 ALTER 权限。

使用 SQL Server Management Studio (SSMS)

使用 SSMS 创建唯一约束

  1. 在对象资源管理器中,右键单击要为其添加唯一约束的表,然后选择“设计”

  2. 在“表设计器”菜单上,选择“索引/键”

  3. 在“索引/键”对话框中,选择“添加”

  4. 常规下的网格中,选择类型,从该属性右侧的下拉列表框中选择唯一键,然后选择关闭

  5. 在“文件”菜单上,选择“保存table_name” 。

使用 Transact-SQL

使用 Transact-SQL 创建唯一约束

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在“标准”栏上,选择“新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 该示例将创建表 TransactionHistoryArchive4 ,并且在列 TransactionID上创建唯一约束。

    USE AdventureWorks2022;  
    GO  
    CREATE TABLE Production.TransactionHistoryArchive4  
     (  
       TransactionID int NOT NULL,   
       CONSTRAINT AK_TransactionID UNIQUE(TransactionID)   
    );   
    GO  
    

在现有表中创建唯一约束

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在“标准”栏上,选择“新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 该示例在表 PasswordHash 中的 PasswordSaltPerson.Password列上创建唯一约束。

    USE AdventureWorks2022;   
    GO  
    ALTER TABLE Person.Password   
    ADD CONSTRAINT AK_Password UNIQUE (PasswordHash, PasswordSalt);   
    GO  
    
    

在新表中创建唯一约束

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在“标准”栏上,选择“新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 该示例创建一个表并在 TransactionID列上定义唯一约束。

    USE AdventureWorks2022;  
    GO  
    CREATE TABLE Production.TransactionHistoryArchive2  
    (  
       TransactionID int NOT NULL,  
       CONSTRAINT AK_TransactionID UNIQUE(TransactionID)  
    );  
    GO  
    

在可为空的列上创建唯一约束

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在“标准”栏上,选择“新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 该示例使用 CREATE UNIQUE INDEX 语法创建已筛选的唯一约束,只对非 NULL 值强制实施唯一性。

    USE AdventureWorks2022;  
    GO
    CREATE UNIQUE INDEX UQ_AdventureWorksDWBuildVersion
    ON dbo.AdventureWorksDWBuildVersion (DBVersion)
    WHERE (DBVersion IS NOT NULL);
    GO