MySQL如果存在则更新否则插入。

3

在 Sql server 中,我使用这个命令插入值,并在 id 已存在时更新该值。

string commandLine = "IF NOT EXISTS(SELECT clientid FROM Rating WHERE clientid = " + clientId + " AND userid = " + userid + ") " +
            "INSERT INTO Rating VALUES(@clientId,@userid,@rating) " +
            "ELSE " +
            "UPDATE Rating SET rating=@rating WHERE clientid = " + clientId + " AND userid = " + userid + ";";

我现在转向使用MySQL,但这个命令不起作用了。在MySQL中有类似的东西吗?


什么不起作用?它是否给出了错误?此外,您的代码看起来有点混乱。您似乎在将值连接到您的SQL(不好!!!)和使用参数(好!!!)之间切换。如果您能够澄清这一点,可能会使事情变得更容易。 - cadrell0
2个回答

7
INSERT ... ON DUPLICATE KEY UPDATE 提供了一种更简单的MySQL语法,并且可以通过受影响行数的API调用提供反馈。在我看来,很少有人意识到这个功能有多方便,可以在程序逻辑中知道以下内容:

使用ON DUPLICATE KEY UPDATE时,每行受影响的行数值为1,如果该行被插入为新行;值为2,如果已存在行被更新;值为0,如果现有行设置为其当前值。


如果我没有主键呢? - YosiFZ
然后加一。你应该有一个。尝试学习MySQL中的索引,因为如果使用得当,它会产生很大的差异。这是一个不错的地方开始。 - marekful

2

如果在客户端ID和用户ID上设置了唯一约束或主键,您可以使用INSERT ... ON DUPLICATE KEY UPDATE 语法

INSERT INTO Rating VALUES(@clientId,@userid,@rating)
ON DUPLICATE KEY
UPDATE Rating SET rating=@rating

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接