0

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

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

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

意味着我正在向表中存在的所有列添加唯一约束。但是在表中插入值时,它只考虑 NUM 作为唯一,但允许分支和 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

4 回答 4

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)
)
于 2013-09-18T14:23:49.833 回答
0

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

于 2013-09-18T14:23:05.220 回答
0

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

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

... CONSTRAINT only_two_columns UNIQUE (branch, pin) ...
于 2013-09-18T14:23:17.463 回答
0

从您的所有回复中,我了解到,1)唯一键与唯一组合一起使用,而不是专注于个人唯一性......例如:唯一(Column1,Column2)意味着column1和column2组合不应重复,但单个值可以重复。

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

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

再次感谢大家对解决我的问题的支持.. :)

谢谢

马赫什

于 2013-09-19T03:28:42.790 回答