1

我不知道如何在标题中解释这一点,但我有一张这样的表格:

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 仅适用于唯一键。

4

2 回答 2

0

您需要将数据库表设置为具有 user_id 和 subscription_id 的复合主键

这样,每一行在两列中都必须是唯一的。

请参阅:如何正确创建复合主键 - MYSQL

于 2012-12-06T14:40:51.100 回答
0

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

  1. 使用跨越唯一键

  2. 使用跨越主键

  3. 也许触发

前两个大致相同,但唯一键也将空值视为不同的,因此这可能不适合您。

ALTER TABLE user_subscriptions ADD PRIMARY(user_id, subscription_id);
于 2012-12-06T14:41:24.720 回答