【问题标题】:mysql combined unique keysmysql组合唯一键
【发布时间】:2012-08-20 23:33:36
【问题描述】:

在 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

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

   | outdoors | fishing rod | 30.99 | target

这可能只使用 MySQL 吗?

【问题讨论】:

    标签: mysql unique-constraint


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          是的,你可以!

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

          【讨论】:

          • 这是个坏主意。数字主键有很多优点,例如一致性(大多数表都有)和简单性。
          【解决方案5】:

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

          【讨论】:

          • 您能否提供一些有关您的代码如何提供和回答问题的其他信息?
          猜你喜欢
          • 1970-01-01
          • 2020-02-02
          • 1970-01-01
          • 2015-05-21
          • 2023-04-06
          • 2019-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多