SQL`update`如果行中存在键的组合 - 否则创建新行

时间:2013-06-06 18:56:19

标签: mysql sql

首先,我在网上和其他地方搜索了这个主题,并找到了相关的文章和答案,但没有一个能做到这一点......

我有table评分,您应该可以更新评分,但不能创建新行。

我的表格包含:productIdratinguserId

如果存在productIduserId的行,则更新rating。否则创建新行。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

首先添加UNIQUE约束:

ALTER TABLE tableX
  ADD CONSTRAINT productId_userId_UQ
    UNIQUE (productId, userId) ;

然后你可以使用INSERT ... ON DUPLICATE KEY UPDATE构造:

INSERT INTO tableX
  (productId, userId, rating)
VALUES
  (101, 42, 5),
  (102, 42, 6),
  (103, 42, 0)
ON DUPLICATE KEY UPDATE
  rating = VALUES(rating) ;

请参阅 SQL-Fiddle

答案 1 :(得分:0)

您遗失了某些内容或需要提供更多信息。您的程序必须执行SQL查询(SELECT语句)以查明该表是否包含具有给定productId和userId的行,然后执行UPDATE语句以更新评级,否则执行INSERT以插入新行。除非您将它们分组到存储过程中,否则它们是单独的步骤。

答案 2 :(得分:0)

使用REPLACE INTO查询。

REPLACE INTO table (productId, userId, rating) VALUES ('product id', 'user id', 'rating');

REPLACE INTO就像普通的插入一样,除非它在表中找到一个具有相同唯一键的行,否则它会在插入之前删除该行。