我正在使用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
)
这完全符合预期。
请让我知道我的疑问有什么问题。
答案 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”相同。所以我问了这个问题。
再次感谢所有人为我的解决方案解决我的问题.. :)
由于
马赫什