5

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

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

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

除了基本功能之外,我对 MySQL 不是很熟悉,所以如果这很简单,我很抱歉。谷歌搜索围绕唯一索引和主键的各种事情并没有帮助。

4

3 回答 3

10

为您希望唯一的列创建唯一索引。

例如:

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

请参阅 MySQL创建索引手册

于 2008-12-05T01:12:09.173 回答
0

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

于 2008-12-05T01:13:45.863 回答
0

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

  • 用户不必再检查该值是否存在。他们只是尝试操作,如果失败,则表示该值已经存在。这会稍微减少数据库的负载,并使应用程序逻辑更简单。
  • 数据库将始终有效,因为它自己执行规则。当您可以推断出快速规则时,使用数据库会容易得多,而不是“我们预计不会有重复,但技术上可能……”这样的废话。
于 2008-12-05T02:17:43.237 回答