MySQL - 使一对值唯一

Jos*_*ain 39 mysql composite-key unique-key

我有一个表有两个ID值的int值.这些ID本身可以在表格中显示任意次数,但它们应该只出现一次.

有没有办法让一对值唯一,并且仍允许单个值多次显示?

作为后续行动,如果可以,可以将这对值用作关键字吗?我目前有一个第3列,用于我的密钥的唯一自动增量值.

Rap*_*aus 63

它被称为复合键.

如果要将实际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>);
Run Code Online (Sandbox Code Playgroud)

您还可以添加一个唯一约束(您的PK将是相同的,并且唯一的对...将必须是唯一的).

alter table <your table> add [constraint <constraint name>] unique index(<col1>, <col2>);
Run Code Online (Sandbox Code Playgroud)

个人而言,我会推荐第二种解决方案(简单PK +唯一约束),但这只是个人观点.你可以谷歌搜索有关复合键的利弊.

两者之间的部分[]是可选的.

编辑

如果你想在create table语句中这样做

对于复合pk

CREATE TABLE Test(
    id1 int NOT NULL, 
    id2 int NOT NULL,
    id3 int NOT NULL,
    PRIMARY KEY (id1, id2)
);
Run Code Online (Sandbox Code Playgroud)

对于一个独特的索引

CREATE TABLE Test1(
    id1 int NOT NULL AUTO_INCREMENT, 
    id2 int NOT NULL,
    id3 int NOT NULL,
    PRIMARY KEY (id1),
    UNIQUE KEY (id2, id3)
);
Run Code Online (Sandbox Code Playgroud)

  • +1用于指定术语复合键,这有助于像我这样的人了解这一新功能 (3认同)

Prz*_*ski 9

试试这个: ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)