首先,我在网上和其他地方搜索了这个主题,并找到了相关的文章和答案,但没有一个能做到这一点......
我有table
评分,您应该可以更新评分,但不能创建新行。
我的表格包含:productId
,rating
,userId
如果存在productId
和userId
的行,则更新rating
。否则创建新行。
我该怎么做?
答案 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
就像普通的插入一样,除非它在表中找到一个具有相同唯一键的行,否则它会在插入之前删除该行。