创建表时SQL Server 2005对多列的UNIQUE约束

时间:2013-09-18 14:20:04

标签: sql sql-server sql-server-2005

我正在使用SQL Server 2005数据库,我遇到了一个问题。

我正在创建一个这样的表:

CREATE TABLE CONT_UNIQUE
(
   NUM INT, 
   BRANCH VARCHAR(10),
   PIN INT,
   CONSTRAINT CON UNIQUE(NUM,BRANCH,PIN)
)

表示我正在为表格中的所有列添加唯一约束。但是在表中插入值时,它只考虑NUM作为UNIQUE,但允许分支和PIN的重复值。

以下是我的两个插入查询。

INSERT INTO CONT_UNIQUE VALUES(1, 'MP', 123)    -> Working fine

INSERT INTO CONT_UNIQUE VALUES(2, 'MP', 123)    -> Should throw error since MP, and 123 are present. 

注意:

CREATE TABLE CONT_UNIQUE
(
    NUM INT UNIQUE , 
    BRANCH VARCHAR(10), UNIQUE,
    PIN INT UNIQUE
)

这完全符合预期。

请让我知道我的疑问有什么问题。

4 个答案:

答案 0 :(得分:3)

您创建了一个约束,确保在所有3列中没有两行具有相同的值。

您需要三个单独的约束,一个在NUM上,一个在BRANCH上,另一个在PIN上。

CREATE TABLE CONT_UNIQUE
(
    NUM INT, 
    BRANCH VARCHAR(10),
    PIN INT,
    CONSTRAINT CON UNIQUE(NUM), 
    CONSTRAINT CON2 UNIQUE(BRANCH), 
    CONSTRAINT CON3 UNIQUE(PIN)
)

答案 1 :(得分:0)

你已经在3列但不是2列的组合上创建了唯一约束,我的意思是你不能再将1,'MP',123值插入表中,但你可以插入1,'MP', 12或1,'MP',13进入表。

答案 2 :(得分:0)

这不会引发错误,因为所有3列都有唯一约束。

我想你也想要这个/而不是:

... CONSTRAINT only_two_columns UNIQUE (branch, pin) ...

答案 3 :(得分:0)

从你的所有回复中我了解到, 1)独特的键与独特的组合工作,而不是专注于个人的独特性......   例如:unique(Column1,Column2)表示column1和column2组合不应重复,但单个值可以重复。

2)如果我们想要每列的唯一值,那么我们需要在创建表时提及每列的“唯一”。   例如:Num int unique,Branch varchar(10)unique ... etc,以便每列都具有唯一值。

以前我认为Unique(Col1,col2)与“col1 int unique,col2 int unique”相同。所以我问了这个问题。

再次感谢所有人为我的解决方案解决我的问题.. :)

由于

马赫什