MySQL中的两列主键

时间:2008-12-05 01:04:55

标签: mysql indexing constraints

我有一个非常简单的问题和一个可行的解决方案,但我正在寻找一个更简单的问题。

当多个值等于现有值时,我想阻止将行添加到数据库中。例如,如果a2 = a1 AND b2 = b1,则数据被拒绝。如果只允许a2 = a1或仅b2 = b1。基本上我希望它像一个主键,需要两个值匹配。

我知道在写入数据库之前我可以通过验证来做到这一点 - 例如。选择*其中a ='a2'和b ='b2'然后避免在得到结果时写入新数据。我宁愿做的是启用MySQL设置,比如主键,它会自动阻止这样的数据。

我不熟悉基本功能之外的MySQL,所以如果这很容易就道歉了。谷歌搜索独特的索引和主键周围的各种事情没有帮助。

3 个答案:

答案 0 :(得分:10)

为您想要唯一的列创建唯一索引。

例如:

CREATE UNIQUE INDEX index_name ON table(col1, col2);

请参阅MySQL Create index manual

答案 1 :(得分:0)

您希望在创建表时使用MySQL CONSTRAINT语法(或更改现有表)。

答案 2 :(得分:0)

除了gcores所说的内容之外,我还想补充一点,你在应用层验证的替代建议是一件坏事。如果两个应用程序试图插入相同的数据,并且它们是交错的,会发生什么?他们可能都检查,看到数据不存在,然后插入。如果使用唯一索引,则有两个好处:

  • 用户不必再检查该值是否存在。他们只是尝试操作,如果失败,那意味着价值已经存在。这会略微降低数据库的负载,并使应用程序逻辑更简单。
  • 数据库始终有效,因为它本身就是强制执行规则。当你能够推断出硬性规则时,使用数据库要容易得多,而不是“我们希望不会有重复,但技术可能......”这样的废话......