首先,我在网上和其他地方搜索过这个话题,发现了大量的文章和答案,但没有一个是这样的......
我有一个table
评级,你应该能够更新你的评级,但不能创建一个新行。
我的表包含:productId
, rating
,userId
如果存在productId
和的行userId
,则更新rating
. 否则创建新行。
我该怎么做呢?
首先添加一个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 查询(SELECT 语句)来确定表是否包含具有给定 productId 和 userId 的行,然后执行 UPDATE 语句来更新评级,否则执行 INSERT 以插入新行。这些是单独的步骤,除非您将它们分组到一个存储过程中。
使用REPLACE INTO
查询。
REPLACE INTO table (productId, userId, rating) VALUES ('product id', 'user id', 'rating');
REPLACE INTO
就像普通的插入一样,除非它在表中找到具有相同唯一键的行,它会在插入之前删除该行。