【问题标题】:Combinationally unique MySQL tables组合唯一的 MySQL 表
【发布时间】:2010-06-13 09:18:48
【问题描述】:

所以,问题来了(这可能很简单:P)

这是我的表结构:

CREATE TABLE `users_awards` (
  `user_id` int(11) NOT NULL,
  `award_id` int(11) NOT NULL,
  `duplicate` int(11) NOT NULL DEFAULT '0',
  UNIQUE KEY `award_id` (`award_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

所以这是一个用户奖励系统。我不希望我的用户多次获得相同的奖励,这就是我有一个“重复”字段的原因。

我正在尝试的查询是这样的(样本数据为 3 和 2):

INSERT INTO  users_awards (user_id, award_id)
VALUES ('3','2') ON DUPLICATE KEY UPDATE duplicate=duplicate+1

所以我的 MySQL 有点生疏了,但我将 user_id 设置为主键,将 award_id 设置为唯一键。这(某种)创造了预期的效果。

当用户 1 获得奖励 2 时,它进入了。如果他/她得到了两次,则表中只有一行,并且重复设置为 1。再次设置为 2,以此类推。

当用户 2 获得奖励 1 时,它进入了。如果他/她得到了两次,重复更新等等。

但是当用户 1 获得奖励 1 时(在用户 2 已经获得奖励之后),用户 2(带有奖励 1)的重复字段会增加,并且不会向用户 1 添加任何内容。

对不起,如果这有点不合情理。非常感谢您的帮助!

杰克

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您是否知道唯一约束可以在列组合上?

    将您的unique constraint 更改为(user_id, award_id)。事实上,这应该是表的主键。那么您的查询应该按您的预期工作。

    【讨论】:

    • 谢谢!我不知道一个独特的约束可能在多个列上......我想这非常重要! :D 我已经添加了这个,现在一切都按预期工作了。干杯!
    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多