SQL - 如何应用“半唯一”约束?

时间:2010-04-20 01:09:08

标签: sql constraints

我有一个(简化的)表格,由三列组成:

id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
foreignID INT NOT NULL,
name VARCHAR NOT NULL

基本上,我想添加一个约束(在数据库级别而不是在应用程序级别),其中每个foreignID只能存在一个唯一的“名称”。例如,给定数据(id,foreignid,name):

1,1,Name1
2,1,Name2
3,1,Name3
4,2,Name1
5,2,Name2

如果用户试图在foreignId 1下插入另一个'Name3',我希望约束失败,但如果用户试图在foreignId 2下插入'Name3',则成功。因此我不能简单地使整个列为UNIQUE。

我很难想出一个SQL表达式来实现这个目标,有人可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:3)

(ForeignID, Name)上添加唯一约束。确切的语法取决于您的DBMS。对于SQL Server:

CREATE UNIQUE INDEX IndexName ON YourTable (ForeignID, Name)

(术语“唯一约束”,“唯一键”和“唯一索引”的含义大致相同。)

答案 1 :(得分:2)

在这两列上创建复合(多列)键

Create Unique Index MyIndexName On TableName(ForeignID, Name)