2008-12-05 85 views
5

我有一个非常简单的问题和解决方案,但我正在寻找一个更简单的问题。MySQL中的两列主键

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

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

我对基本功能以外的MySQL并不是很熟悉,所以很抱歉,如果这很简单。以独特的索引和主键搜索各种各样的东西并没有帮助。

回答

10

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

如:

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

见MySQL的Create index manual

+0

http:// dev.mysql.com/doc/refman/4.1/en/create-index.html – Chris 2008-12-05 01:13:45

0

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

+0

http://dev.mysql.com/doc/refman/4.1/en/constraint-primary-key.html – Chris 2008-12-05 01:16:13

0

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

  • 用户不必检查值是否存在了。他们只是尝试操作,如果失败了,那意味着价值已经存在。这会稍微减轻数据库的负担,并使应用程序逻辑更简单。
  • 数据库将始终有效,因为它本身实施规则。使用数据库时,使用数据库比使用硬快速规则容易得多,而不是“我们预计不会有重复数据,但技术上可能......”的碎片。