我正在尝试编写以下查询,但我对 SQL 不太满意。 我隔离了插入和更新,它可以工作,但我无法进行条件控制。 我不明白为什么它总是失败,有人可以帮助我吗?
IF (SELECT * FROM Infopoints WHERE name = @name) THEN
BEGIN
INSERT INTO Infopoints (idInfopoint, createdAt, updatedAt, name)
VALUES(@idInfopoint, @createdAt, @updatedAt, @name)
END;
ELSE
BEGIN
UPDATE Infopoints SET updatedAt = @updatedAt WHERE name = @name;
END;
ENDIF;";
最佳答案
您想要重复 key 更新
。我认为逻辑是:
INSERT INTO Infopoints (idInfopoint, createdAt, updatedAt, name)
VALUES(@idInfopoint, @createdAt, @updatedAt, @name)
ON DUPLICATE KEY UPDATE updatedAt = @updatedAt;
为此,您需要在 name
上有一个唯一索引:
CREATE UNIQUE INDEX idx_infopoints_name ON infopoints(name);
您想要的 IF
逻辑是:
IF NOT EXISTS (SELECT * FROM Infopoints WHERE name = @name) THEN
. . .
但是,ON DUPLICATE KEY UPDATE
是更好的方法。
关于mysql - 我不明白如何检查sql中的查询条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37413944/