1

首先,我在网上和其他地方搜索过这个话题,发现了大量的文章和答案,但没有一个是这样的......

我有一个table评级,你应该能够更新你的评级,但不能创建一个新行。

我的表包含:productId, rating,userId

如果存在productId和的行userId,则更新rating. 否则创建新行。

我该怎么做呢?

4

3 回答 3

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

于 2013-06-06T19:22:22.180 回答
0

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

于 2013-06-06T19:02:12.100 回答
0

使用REPLACE INTO查询。

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

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

于 2013-06-06T19:03:11.063 回答