在mysql中插入数据时如何防止重复?

时间:2015-08-03 20:23:20

标签: mysql

我试图将.csv文件中的(如果它不存在)插入到我的表中。我试过INSERT IGNORE和REPLACE。但是这些在这种情况下不起作用,所以我仍然有重复。那么当我插入时,我该怎么办才能防止重复?感谢。

这是我的代码:

ViewScoped

2 个答案:

答案 0 :(得分:0)

如果您在UNIQUE INDEX中的所有列上创建attributevalue,则可以使用INSERT IGNORE来防止重复。

如果你不能这样做,你可以在表格中使用LEFT JOIN,这样你只能从temp_table返回与attributevalue中的行不匹配的行。

INSERT INTO attributevalue(object_id, object_tid, attr_id, string_value)
SELECT o.id, o.objtype_id, 9999, t.Mac_address
FROM temp_table AS t
JOIN object AS o ON o.name = t.name
JOIN attributevalue AS attr ON attr.object_id = o.id
LEFT JOIN attributevalue AS attr1 
    ON attr1.object_id = o.id 
        AND attr1.object_tid = o.objtype_id 
        AND attr1.attr_id = 9999 
        AND attr1.string_value = t.Mac_address
WHERE attr.attr_id = 9999
AND attr1.object_id IS NULL

答案 1 :(得分:0)

如果您正在使用索引,则ON DUPLICATE KEY UPDATE可能有效:

INSERT INTO attributevalue (object_id, object_tid, attr_id, string_value) VALUES (valueObjectId, ....) ON DUPLICATE KEY UPDATE string_value = 'value', ...

检查MySQL文档:https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html