基于两列的MySQL过滤器唯一性

时间:2019-02-07 11:52:53

标签: mysql sql

我想知道在MySQL中是否有可能确保如果两列匹配则不可能出现双行。我正在处理代表关注者的表,所以看起来像这样:

+----------+------------+-------------+
| followID | followerID | followingID |
+----------+------------+-------------+
| 1        | 1          | 2           |
| 2        | 1          | 3           |
| 3        | 2          | 1           |
| 4        | 3          | 1           |
+----------+------------+-------------+

基本上意味着用户1正在跟踪用户2和3,用户2和3正在跟踪用户1。现在,我想避免在这里出现双重结果,因此我想要基于followerID和followingID的唯一性。目前,我运行两个查询来检查该行是否已经存在(使用SELECT),并且仅当它不存在时才允许新的INSERT。

但是,我想采取第二种安全措施,如果已经存在,则无法进行插入。所以我想避免这种情况:

+----------+------------+-------------+
| followID | followerID | followingID |
+----------+------------+-------------+
| 1        | 1          | 2           |
| 2        | 1          | 3           |
| 3        | 2          | 1           |
| 4        | 3          | 1           |
| 5        | 2          | 1           | *
| 6        | 1          | 3           | *
+----------+------------+-------------+

行5和6应该永远无法插入,因为它们已经在表中了。可以在MySQL中实现还是必须在服务器上对其进行检查?

1 个答案:

答案 0 :(得分:0)

ALTER TABLE Follower 
  ADD CONSTRAINT [yourConstraintName]
  UNIQUE(followerID, followingID)