MySQL - 使一对值唯一

标签 mysql composite-key unique-key

我有一个表,其中包含两个作为 ID 的 int 值。这些 ID 单独可以在表格中出现任意次数,但它们一起只能出现一次。

有没有一种方法可以使一对值唯一并且仍然允许单个值多次显示?

作为后续,如果可能的话,这对值可以用作键吗?我目前有一个第三列用于我的键的唯一自动增量值。

最佳答案

它被称为复合键。

如果您想将实际 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 + 唯一约束),但这只是个人观点。您可以在 Google 上搜索有关复合键的优缺点。

[] 之间的部分是可选的。

编辑

如果您想在创建表语句中执行此操作

对于复合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)
);

关于MySQL - 使一对值唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12763726/

相关文章:

mysql - 如何以编程方式处理休眠连接? - mysql

java - 如何将字节数组转换为 blob

php - Laravel 5.4 需要通过 Eloquent 关系获取不同的记录

php - Doctrine 2 复合键和 DQL 连接

php - Laravel 迁移 : unique key is too long, 即使指定

mysql - 如何将 MySQL 数据库转换为 XML?

mybatis - MyBatis <collection> 映射中的复合键

sql - 来自复合键的索引是否足够?

mysql 不考虑重音来验证索引键的唯一性

php - 为电子商务生成高度独特的字符串