表中有多个唯一键

时间:2015-06-08 09:48:51

标签: sql sql-server

我的数据库中有一个Product表,其中包含以下列:

ProductId INT IDENTITY PRIMARY KEY
ProductCode VARCHAR(100) NOT NULL
ProductStamp VARCHAR(100) NOT NULL

我需要ProductCode和ProductStamp两者都是唯一的,例如:

允许的

Code Stamp
---- -----
A001 S001
A002 S002

不允许

Code Stamp
---- -----
A001 S001
A001 S002

如何实现这一目标?非常感谢你

3 个答案:

答案 0 :(得分:4)

单个列的唯一约束:

ALTER TABLE Product ADD CONSTRAINT AK_Product_ProductCode UNIQUE( ProductCode )
ALTER TABLE Product ADD CONSTRAINT AK_Product_ProductStamp UNIQUE( ProductStamp )

如果有两行包含重复的产品代码或产品标记,则会产生错误。

多列的唯一约束:

ALTER TABLE Product ADD CONSTRAINT AK_Product_ProductCodeAndStamp UNIQUE( ProductCode, ProductStamp )

如果有两行代码并且标记相同,则会触发。

用于命名的约定“AK”代表“备用键”

答案 1 :(得分:1)

您需要添加唯一索引:

CREATE UNIQUE NONCLUSTERED INDEX [IX_NAME] ON [your_table] 
(
    ProductCode

) WITH IGNORE_DUP_KEY;

答案 2 :(得分:0)

根据您的需求,我建议您使用unique constraintunique index到您需要数据库强制执行的唯一性的列。

请注意,唯一约束不会以任何方式编入索引,因此如果您在where子句(或联接)中使用了很多唯一列,则可能需要使用索引。
如果没有,就存储大小和插入/更新成本而言,唯一约束会更好。