这是我的表格,其中包含一些示例数据
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相同的内容,但不应该有重复。
答案 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语句。