繁体   English   中英

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

[英]SQL Server 2005 UNIQUE Constraint on Multiple Column while creating table

我正在使用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
)

这完全符合预期。

请让我知道我的查询出了什么问题。

您创建了一个约束,以确保没有两行在所有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)
)

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

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

我想您也想要这个/

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

从您的所有答复中,我了解到:1)Unique键与Unique组合一起使用,而不是关注单个的唯一性...例如:unique(Column1,Column2)表示column1和column2的组合不应重复,但各个值可以重复。

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

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

再次感谢大家为解决我的查询提供的支持.. :)

谢谢

马赫什

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM