20

MySQL中有没有办法拥有两个唯一的键并以某种方式连接它们?

例如,如果我有下表并且“标题”和“商店”是唯一键

id | category | title       | price | store
1  | outdoors | fishing rod | 59.99 | wal-mart
2  | auto     | Penzoil Oil | 9.99  | target

我尝试插入以下记录。这条新记录将被忽略,因为标题是“钓鱼竿”并且商店是“沃尔玛”,并且存在具有该标题和商店的现有记录

   | outdoors | fishing rod | 30.99 | wal-mart

但是如果我尝试插入以下记录,它将被接受,因为不存在标题为“钓鱼竿”和存储“目标”的记录

   | outdoors | fishing rod | 30.99 | target

这可能只用 MySQL 吗?

4

5 回答 5

37

您可以在多个列上定义索引,例如:

CREATE UNIQUE INDEX arbitrary_index_name ON table_name (title, store);
于 2012-08-25T21:20:09.430 回答
7

是的。您应该在两列上创建一个唯一约束,而不是两个单独的唯一约束。

CREATE INDEX语法是:

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [algorithm_option | lock_option] ...

对于您的示例,它看起来像这样:

CREATE UNIQUE INDEX index_name ON tbl_name (title,store);

您还必须删除您创建的两个不正确的唯一索引。

有关如何创建索引的更多详细信息,请参阅文档。

于 2012-08-25T21:18:22.460 回答
1

您需要一个多列唯一键

于 2012-08-25T21:20:03.943 回答
1

ALTER TABLEtable_name添加唯一索引( title, store);

于 2017-05-12T09:14:32.873 回答
-1

是的你可以!

ALTER TABLE table_name DROP PRIMARY KEY;
ALTER TABLE table_name ADD PRIMARY KEY(title, store);
于 2012-08-25T21:20:37.410 回答