这是我的表,其中包含一些示例数据
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 |当我运行这个query##时
INSERT IGNORE INTO table_name (C_ID, D_ID, Details) VALUES ('C', 'b_data3','d3') ('C', 'b_data2','d2')
当它应该忽略第二个值对('C', 'b_data2','d2')时,它插入这两行
未定义索引/primary键。
我希望确保没有重复的行,这意味着三列中的数据组合在一起应该使行唯一。我不能让它成为唯一的.As,我在这里已经说明过了,a可以保持和b相同的内容,但是a不应该有重复的内容。
发布于 2012-05-28 00:38:50
MySQL对唯一索引强制执行唯一约束。如果希望在不重新创建表的情况下添加索引,则可以执行以下操作:
CREATE UNIQUE INDEX index_name ON table (C_ID, D_ID, Details)除了已经提到的INSERT IGNORE和REPLACE之外,您还可以使用INSERT...ON DUPLICATE KEY UPDATE来更好地控制当insert运行到重复的唯一时发生的事情。
发布于 2012-05-28 00:26:52
INSERT IGNORE的意思是“忽略违反唯一约束的行,而不是使查询失败”。您需要定义UNIQUE列,才能使其按预期方式工作-例如,CREATE TABLE tablename (col1 type, col2 type, col3 type, UNIQUE (col1, col2, col3))
发布于 2012-05-28 00:33:39
您应该按照@lanzz的建议定义组合的唯一索引。如果希望在索引冲突的情况下使用新记录替换旧记录,请使用replace语句。
https://stackoverflow.com/questions/10775471
复制相似问题