MySQL:INSERT IGNORE或ON DUPLICATE KEY UPDATE,检查多个而不是唯一的列

时间:2011-08-11 12:14:09

标签: mysql

我想插入包含特定值的行的行,如果不存在则更新它。

具体地:

数据库中存在列user_id=5, user_zip=12345, distance=600

如果我尝试插入user_id=5, user_zip=12345, distance=700,则应该只更新distance

但是我尝试插入user_id=5, user_zip=67890, distance=800它应该插入一个新行。

我无法定义列user_zipdistance唯一,因此我可以使用重复键更新。

1 个答案:

答案 0 :(得分:3)

我认为你误解了ON DUPLICATE KEY UPDATE的工作原理。对(user_id, user_zip)采用唯一约束,这应该有效:

INSERT INTO yourTable (user_id, user_zip, distance) VALUES (5,12345,600)
ON DUPLICATE KEY UPDATE distance=600;

您不必定义user_zip unique(这就是我理解您的问题的方式),只需user_iduser_zip的组合。因此,您仍然可以使用相同user_id的2行或更多行,只有user_zip在这些行上无法匹配。