【问题标题】:Unique Key in MySqlMySql 中的唯一键
【发布时间】:2011-01-26 16:37:15
【问题描述】:

我有一个包含四列的表:Col1、Col2、Col3 和 Col4。
Col1、Col2、Col3 是字符串,Col4 是具有 Auto Increment 的整数主键。现在我的要求是 Col2 和 Col3 的独特组合。

我的意思是说喜欢。

Insert into table(Col1, Col2, Col3) Values ('val1', 'val2', 'val3');
Insert into table(Col1, Col2, Col3) Values ('val4', 'val2', 'val3');

第二个语句必须抛出错误,因为表中存在 'val2','val3' 的相同组合。但是我不能将它作为主键,因为我需要一个自动增量列,因此 col4 必须是主键。请让我知道一种方法,我可以在我的桌子上同时拥有这两种方法。

【问题讨论】:

  • 如果我尝试在第 2 列中插入“val3”,在第 3 列中插入“val 2”,您的业务规则是否允许将相反顺序的值对视为重复项?跨度>
  • 是的,应该可以反向。

标签: sql mysql mysql5


【解决方案1】:

您可以在数据库架构中设置两个或多个键的组合是唯一的要求。可以在这里找到:

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

这可以通过如下命令来完成

ALTER TABLE YourTable ADD UNIQUE (Col2,Col3);

【讨论】:

    【解决方案2】:

    您可以通过在这些字段上创建唯一索引来做到这一点。

    http://dev.mysql.com/doc/refman/5.0/en/create-index.html

    来自该文档:

    UNIQUE 索引创建一个约束,使得索引中的所有值都必须是不同的。如果您尝试使用与现有行匹配的键值添加新行,则会发生错误。此约束不适用于 NULL 值,但 BDB 存储引擎除外。对于其他引擎,UNIQUE 索引允许包含 NULL 的列有多个 NULL 值。如果为 UNIQUE 索引中的列指定前缀值,则列值在前缀中必须是唯一的。

    【讨论】:

      【解决方案3】:

      我会检查这些值作为插入逻辑的一部分。在插入之前,写一些类似...

      if exists
          select 1 from table
          where col2 = inputCol2 and col3 = inputCol3
      then -- combo already exists
          do nothing / set error
      else -- combo doesnt exist yet
          insert into table
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-12
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        相关资源
        最近更新 更多