【问题标题】:mysql Query Insert into or update when entry already exists当条目已经存在时,mysql查询插入或更新
【发布时间】:2011-11-27 23:33:21
【问题描述】:

我有以下查询(user_id 不是也不能是主键,因为每个用户有很多条目取决于表的另一列)。我使用了重复键但不起作用。它仍然添加了一个新行。有什么想法吗?

INSERT INTO profile (user_id, correct) VALUES(". $user_id . ", correct + 1)
ON DUPLICATE KEY UPDATE correct=correct+1

编辑 因此,如果此 user_id 存在行,我想更新此条目并设置正确 = 正确 +1,而不是再次使用 user_id 和正确 = 1 创建新条目

【问题讨论】:

  • 你的问题对我来说不太合理。如果user_id 不是唯一的,那么如何知道要更新哪一行?你让它听起来像user_id 加上其他一些(未命名的)列应该一起成为主键;但是你有一个 INSERT 语句,它没有为其他列设置值。我认为您可能需要重新检查您的表设计,并确保您有一个合理的主键。

标签: mysql


【解决方案1】:

试试这个:

INSERT IGNORE INTO profile (user_id, correct)
VALUES ($user_id, 0);

UPDATE profile SET correct = correct + 1 
WHERE  user_id = $user_id;  -- updates 0 to 1

或者:

UPDATE profile SET correct = correct + 1 
WHERE  user_id = $user_id;

如果没有找到:

INSERT INTO profile (user_id, correct)
VALUES ($user_id, 1);

我更喜欢第二种变体。
第一个变体要求user_id 具有唯一约束。 (主键计数。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 2016-06-03
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多