0

这是我的表格,上面有一些示例数据

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 相同的内容,但 a 不应该有重复。

4

3 回答 3

2

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

于 2012-05-27T16:26:51.760 回答
1

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

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

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

于 2012-05-27T16:38:50.133 回答
0

您应该按照@lanzz 的建议定义组合的 uniqe 索引。如果您希望在索引冲突的情况下新记录替换旧记录,请使用替换语句。

于 2012-05-27T16:33:38.733 回答