MySQL联合唯一键

21

在MySQL中有没有办法拥有两个唯一键并将它们连接起来?

例如,如果我有以下表格,并且“title”和“store”是唯一键:

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

但如果我尝试插入以下记录,它将被接受,因为不存在具有标题“钓鱼竿”和商店“Target”的记录。

   | outdoors | fishing rod | 30.99 | target

仅使用MySQL可以实现吗?

5个回答

39

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

CREATE UNIQUE INDEX arbitrary_index_name ON table_name (title, store);

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);

您还需要删除您创建的两个错误唯一索引。

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


3

将表格table_name添加唯一索引(title, store)。


你能提供一些关于你的代码如何回答这个问题的额外信息吗? - Joshua Drake

1

-1

可以的!

ALTER TABLE table_name DROP PRIMARY KEY;
ALTER TABLE table_name ADD PRIMARY KEY(title, store);

3
这是一个不好的想法。数值主键有很多优点,比如一致性(大多数表格都用它)和简单性。 - Bugs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接