2012-12-06 88 views
1

我不知道如何在标题解释这一点,但我已经是这样的一个表:MySQL的插入(条件)独特的价值每一次用户

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

+0

它们实际上在唯一键和主键上工作;不确定触发器。底线,跨越主键:) –

回答

0

的唯一可靠和简单的方法,以确保一个元组不能出现超过一次单个表里面有两种情况:

  1. 使用生成树唯一键

  2. 使用跨越式主键

  3. 也许触发器

前两个大致相同,但唯一键将空值视为不同,以至于可能无法为您工作。

ALTER TABLE user_subscriptions ADD PRIMARY(user_id, subscription_id);