我有一个包含两个int值的表,这些值是ID。这些ID本身可以在表格中显示任意次数,但它们应该只出现一次。
有没有办法让一对值唯一,但仍允许各个值多次显示?
作为后续行动,如果可以,可以将这对值用作关键字吗?我目前有第3列用于我的密钥的唯一自动增量值。
答案 0 :(得分:59)
它被称为复合键。
如果您想将实际PK更改为复合PK,请使用
Alter table <your table> drop PRIMARY KEY;
Alter table <your table> drop COLUMN <your autoincremented column>;
Alter table <your table> add [constraint <constraint name>] PRIMARY KEY (<col1>, <col2>);
您还可以添加一个唯一约束(您的PK将是相同的,并且唯一对...将必须是唯一的。)
alter table <your table> add [constraint <constraint name>] unique index(<col1>, <col2>);
个人而言,我会推荐第二种解决方案(简单PK +唯一约束),但这只是个人观点。您可以谷歌搜索有关复合键的优缺点。
[]
之间的部分是可选的。
修改强>
如果你想在create table语句中执行此操作
对于复合pk
CREATE TABLE Test(
id1 int NOT NULL,
id2 int NOT NULL,
id3 int NOT NULL,
PRIMARY KEY (id1, id2)
);
获取唯一索引
CREATE TABLE Test1(
id1 int NOT NULL AUTO_INCREMENT,
id2 int NOT NULL,
id3 int NOT NULL,
PRIMARY KEY (id1),
UNIQUE KEY (id2, id3)
);
答案 1 :(得分:8)
试试这个:ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)
答案 2 :(得分:0)
将primary key (col1, col2)
添加到您的创建表定义