MySQL为每个用户插入一次(条件)唯一值

时间:2012-12-06 14:37:47

标签: mysql insert key unique

我不知道如何在标题中解释这一点,但我所拥有的是这样一个表:

user_id           | subscription_id
6                   12
6                   10
12                  6
4                   12

每个用户都可以订阅所有其他用户,但是可以阻止用户通过INSERT查询两次订阅其他用户吗?

由于我的subscription_id不是唯一的,所以会发生这种情况:

user_id           | subscription_id
6                   12
6                   12

我想避免这种情况。据我所知INSERT IGNORE,INSERT UPDATE和ON DUPLICATE仅适用于唯一键。

2 个答案:

答案 0 :(得分:0)

您需要将数据库表设置为具有user_id AND subscription_id

的复合主键

这样,每一行的每一行都必须是唯一的。

请参阅:How to properly create composite primary keys - MYSQL

答案 1 :(得分:0)

确保元组不能在单个表中出现多次的唯一可靠且简单的方法是:

  1. 使用跨越唯一键

  2. 使用生成主键

  3. 可能触发

  4. 前两个大致相同,但唯一键也将空值视为不同,因此可能对您不起作用。

    ALTER TABLE user_subscriptions ADD PRIMARY(user_id, subscription_id);