MySQL插入但更新/忽略重复

时间:2012-05-27 16:23:33

标签: mysql insert duplicates

这是我的表格,其中包含一些示例数据

C ID | D ID    | Details |
--------------------------
 a   | b_data1 | d1      |
 a   | b_data2 | d2      |
 b   | b_data1 | d1      |
 b   | b_data2 | d2      |
 c   | b_data1 | d1      |
 c   | b_data2 | d2      |

当我运行此查询##

INSERT IGNORE INTO table_name (C_ID, D_ID, Details) VALUES ('C', 'b_data3','d3') ('C', 'b_data2','d2')

当它应该忽略第二个值对('C', 'b_data2','d2')

时,它会插入这些行

未定义索引/主键。

我想确保没有重复的行,意味着三列中的数据组合应该使行唯一。我不能让它独一无二。正如我在这里所说明的那样,a可以保留与b相同的内容,但不应该有重复。

3 个答案:

答案 0 :(得分:2)

INSERT IGNORE表示“忽略破坏唯一约束的行,而不是使查询失败”。您需要定义UNIQUE列才能使其按预期工作 - 例如CREATE TABLE tablename (col1 type, col2 type, col3 type, UNIQUE (col1, col2, col3))

答案 1 :(得分:1)

MySQL使用UNIQUE索引强制执行唯一约束。如果您希望在不重新创建表的情况下添加索引,则可以执行以下操作:

CREATE UNIQUE INDEX index_name ON table (C_ID, D_ID, Details)

除了INSERT IGNORE和已经提到的REPLACE之外,您还可以使用INSERT ... ON DUPLICATE KEY UPDATE来更好地控制插入运行到重复唯一时发生的事情。

答案 2 :(得分:0)

您应该定义@lanzz建议的复合唯一索引。如果您希望在索引冲突的情况下替换旧记录,请使用replace语句。