使用ON DUPLICATE KEY UPDATE进行mysql更新

时间:2012-03-02 20:58:14

标签: mysql replace duplicates unique-key

我有一个外键表,我正在尝试合并重复记录。

我的表格如下:

user_id | object_id

该表是两列唯一键,因此不能重复。

我的查询如下:

UPDATE user_object SET object_id = merge_obj_id WHERE object_id = old_object_id

这个工作正常,直到有一个用户连接到旧对象和merged_object。这会导致重复。我被卡住了,我可以想办法用多个查询和对象操作来做到这一点,但我真的想在SQL中这样做。

更新: 这可能有用吗?

INSERT INTO user_object (user_id,merge_object_id) SELECT user_id FROM user JOIN
user_object ON user.user_id = user_object.user_id WHERE object_id = old_object_id ON
DUPLICATE KEY (DELETE user_object WHERE user_object.user_id = user_id AND
user_object.user_id = old_object_id);`

更新: 试过这个:

INSERT user_object(user_id,object_id)    选择12345作为object_id,将user.user_id作为user_id    来自用户    JOIN user_object ON user.user_id = user_object.user_id
   在哪里user_object.object_id = 23456

但它给了我这个错误:

无法添加或更新子行:外键约束失败(yourtableuser_object,CONSTRAINT FK_user_object_user_idx FOREIGN KEY(user_id)参考useruser_id))

2 个答案:

答案 0 :(得分:2)

您可以使用

REPLACE INTO user_object(user_id,object_id)SELECT 12345 as object_id,user.user_id as user_id FROM user JOIN user_object ON user.user_id = user_object.user_id 在哪里user_object.object_id = 23456

这将删除在插入新行之前匹配的所有旧行。

合并两个对象时,是保留旧对象还是合并的对象,还是删除其中一个?如果删除合并到旧对象的新对象,则无需更新主键,因为旧对象引用仍然有效

答案 1 :(得分:0)

我想你想要

INSERT .... ON DUPLICATE KEY UPDATE"

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html