MySql Update if if exists如果不存在则插入

时间:2017-04-15 15:13:04

标签: php mysql sql

我试图在表中插入新内容或在同一个查询中更新前一个。我可以用一些PHP代码解决它但我的目标是在sql中完成所有操作。

问题

我的应用程序有不同语言的名称,我可以添加新语言。当我添加新语言时,我的产品的翻译会提高。 我的目标是发送脚本信息,如果两列相同,则应更新数据,但如果不是,则应更新。

以下是我的一些疑问:

"INSERT INTO product_name(link,product_id,language)
VALUES(:link,:product_id,:language) ON DUPLICATE KEY UPDATE
link=:link,product_id=:product_id,language=:language"

上面的查询解决了问题的一部分,但是当我想更改链接时,它会添加新数据。我的目标是更改链接,如果该行中的product_id和语言相同,则应该更新如果不是新的,则应添加。独特不会解决问题,因为我需要在表中使用相同的语言和id。

1 个答案:

答案 0 :(得分:0)

我认为您只需要(product_id, language)上的唯一约束 - 并且在所有三列上都没有唯一约束或主键。

CREATE UNIQUE INDEX unq_productname_product_language ON product_name(product_id, language);

这要求值的是唯一的,而不是单独的每一个。

然后这应该做你想要的:

INSERT INTO product_name(link, product_id, language)
    VALUES (:link, :product_id, :language)
    ON DUPLICATE KEY UPDATE link = VALUES(link);

请注意,此版本使用VALUES(link)。这使用在语句中插入的值。我认为这比重复表达更清楚。