我有一个非常简单的问题和一个可行的解决方案,但我正在寻找一个更简单的问题。
当多个值等于现有值时,我想阻止将行添加到数据库中。例如,如果a2 = a1 AND b2 = b1,则数据被拒绝。如果只允许a2 = a1或仅b2 = b1。基本上我希望它像一个主键,需要两个值匹配。
我知道在写入数据库之前我可以通过验证来做到这一点 - 例如。选择*其中a ='a2'和b ='b2'然后避免在得到结果时写入新数据。我宁愿做的是启用MySQL设置,比如主键,它会自动阻止这样的数据。
我不熟悉基本功能之外的MySQL,所以如果这很容易就道歉了。谷歌搜索独特的索引和主键周围的各种事情没有帮助。
答案 0 :(得分:10)
为您想要唯一的列创建唯一索引。
例如:
CREATE UNIQUE INDEX index_name ON table(col1, col2);
请参阅MySQL Create index manual。
答案 1 :(得分:0)
您希望在创建表时使用MySQL CONSTRAINT
语法(或更改现有表)。
答案 2 :(得分:0)
除了gcores所说的内容之外,我还想补充一点,你在应用层验证的替代建议是一件坏事。如果两个应用程序试图插入相同的数据,并且它们是交错的,会发生什么?他们可能都检查,看到数据不存在,然后插入。如果使用唯一索引,则有两个好处: