Mysql SQL`update`如果行中存在键的组合-否则创建新行
首先,我在这里和网上其他地方搜索过这个话题,找到了一些令人讨厌的文章和答案,但没有一篇是这样的 我有一个带有评级的Mysql SQL`update`如果行中存在键的组合-否则创建新行,mysql,sql,Mysql,Sql,首先,我在这里和网上其他地方搜索过这个话题,找到了一些令人讨厌的文章和答案,但没有一篇是这样的 我有一个带有评级的表,您应该能够更新评级,但不能创建新行 我的表格包含:productId,评级,userId 如果存在具有productId和userId的行,则更新rating。否则创建新行 我该怎么做?您缺少一些信息或需要提供更多信息。程序必须执行SQL查询(SELECT语句)以确定表中是否包含具有给定productId和userId的行,然后执行UPDATE语句以更新评级,否则执行INSERT
表
,您应该能够更新评级,但不能创建新行
我的表格包含:productId
,评级
,userId
如果存在具有productId
和userId
的行,则更新rating
。否则创建新行
我该怎么做?您缺少一些信息或需要提供更多信息。程序必须执行SQL查询(SELECT语句)以确定表中是否包含具有给定productId和userId的行,然后执行UPDATE语句以更新评级,否则执行INSERT以插入新行。除非您将这些步骤分组到存储过程中,否则它们是单独的步骤。您缺少某些内容或需要提供更多信息。程序必须执行SQL查询(SELECT语句)以确定表中是否包含具有给定productId和userId的行,然后执行UPDATE语句以更新评级,否则执行INSERT以插入新行。除非将它们分组到存储过程中,否则这些步骤是单独的。使用
替换为查询
REPLACE INTO table (productId, userId, rating) VALUES ('product id', 'user id', 'rating');
REPLACE-INTO
与普通的insert类似,除非它在表中找到具有相同唯一键的行,它将在插入之前删除该行。使用REPLACE-INTO
查询
REPLACE INTO table (productId, userId, rating) VALUES ('product id', 'user id', 'rating');
REPLACE-INTO
与普通插入类似,除非它发现表中已有一行具有相同的唯一键,它将在插入前删除该行。首先添加一个唯一的约束:
ALTER TABLE tableX
ADD CONSTRAINT productId_userId_UQ
UNIQUE (productId, userId) ;
然后您可以使用插入。。。在重复密钥更新时
构造:
INSERT INTO tableX
(productId, userId, rating)
VALUES
(101, 42, 5),
(102, 42, 6),
(103, 42, 0)
ON DUPLICATE KEY UPDATE
rating = VALUES(rating) ;
请参见首先添加一个唯一的约束:
ALTER TABLE tableX
ADD CONSTRAINT productId_userId_UQ
UNIQUE (productId, userId) ;
然后您可以使用插入。。。在重复密钥更新时
构造:
INSERT INTO tableX
(productId, userId, rating)
VALUES
(101, 42, 5),
(102, 42, 6),
(103, 42, 0)
ON DUPLICATE KEY UPDATE
rating = VALUES(rating) ;
查看关于重复密钥更新的,您搜索过吗?是的,但它不是重复密钥。userId可以为其他productID评分,其他用户也可以为productID评分…两列可以一起作为主键,因此它将是一个重复键,在(userId,productID)
上具有唯一(或主键)约束,重复密钥更新上的构造将正常工作。重复密钥更新上的的可能重复项
您搜索过吗?是的,但它不是重复密钥。userId可以为其他productID评分,其他用户也可以为productID评分…两列可以一起作为主键,因此它将是一个重复键,在(userId,productID)
上具有唯一(或主键)约束,重复键更新上的结构可以很好地工作。如何从PHP调用一次就完成这些单独步骤的可能重复?你能给我介绍一个例子或给我看一下吗?我如何通过一个PHP调用来完成这些单独的步骤?你能给我介绍一个例子吗?你的唯一密钥应该是产品id和用户id的组合密钥,在这种情况下,它也恰好是你的主键。当查询运行时,如果找到现有的产品id和用户id组合,它将删除该行,然后执行插入。REPLACE
有几个缺点。请阅读:您的唯一密钥应该是product_id和user_id的组合密钥,在这种情况下,它也恰好是您的主键。当查询运行时,如果找到现有的产品id和用户id组合,它将删除该行,然后执行插入。REPLACE
有几个缺点。阅读:这不允许我对一个以上的产品进行评级。。。它只更新第一个产品的评级…这不允许我对多个产品进行评级。。。它只更新第一个产品的评级。。。