MySQL插入但更新/忽略重复

MySQL插入但更新/忽略重复,mysql,insert,duplicates,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 I

这是我的表格和一些示例数据

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 to table_name(C_ID,D_ID,Details)值('C','b_data3','d3')('C','b_data2','d2')。

当它应该忽略第二个值对
('C','b_data2','d2')时,它会插入这两行

未定义索引/主键


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

INSERT IGNORE
的意思是“忽略打破唯一约束的行,而不是使查询失败”。您需要定义
UNIQUE
列,以使其按预期工作-例如
创建表tablename(col1-type、col2-type、col3-type、UNIQUE(col1、col2、col3))
插入忽略
意味着“忽略打破唯一约束的行,而不是查询失败”。您需要定义
UNIQUE
列以使其按预期工作-例如
创建表tablename(col1-type、col2-type、col3-type、UNIQUE(col1、col2、col3))

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

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

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

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

除了INSERT IGNORE和前面提到的REPLACE之外,您还可以使用INSERT…ON DUPLICATE KEY UPDATE来更好地控制INSERT运行到重复unique时发生的情况。

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

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

除了插入忽略和前面提到的替换之外,您还可以使用“重复密钥更新时插入…”来更好地控制插入遇到重复唯一项时发生的情况。

我无法使其唯一,因为这是一个集合页,例如,应能够存储
a>b_数据1>d1和a>b_数据2>d2
和b
b_数据1>d1和b>b_数据2>d2
关于所示信息的表格。a可以具有集合b的相同内容,但在aIf中不能具有相同的内容如果您定义了
UNIQUE(col1、col2、col3)
,这意味着您不能在所有这些列中都具有相同的值。也就是说,只要
col2
col3
不同,就可以在
col1
中使用相同的值。或者,只要
col1
不同,您可以在
col2
col3
中使用相同的值。这是所有三列的复合索引,并不意味着每一列都必须是唯一的。非常感谢您的帮助。。我现在清楚它的用法了。。我无法在此表中创建唯一/主键,因为没有唯一的单列。当三者结合在一起时,它是独一无二的。我不得不质疑和做!在_数组($data,$query_数组)中,我无法使其唯一,因为这是一个集合页面,例如,应该能够存储关于我所示的表的
a>b_数据1>d1和a>b_数据2>d2
和b
b>b_数据1>d1和b>b_数据2>d2
。a可以具有集合b的相同内容,但在aIf中不能具有相同的内容如果您定义了
UNIQUE(col1、col2、col3)
,这意味着您不能在所有这些列中都具有相同的值。也就是说,只要
col2
col3
不同,就可以在
col1
中使用相同的值。或者,只要
col1
不同,您可以在
col2
col3
中使用相同的值。这是所有三列的复合索引,并不意味着每一列都必须是唯一的。非常感谢您的帮助。。我现在清楚它的用法了。。我无法在此表中创建唯一/主键,因为没有唯一的单列。当三者结合在一起时,它是独一无二的。我不得不质疑和做!在数组中($data,$query\U array)来解决这个问题,但我不能使它唯一。我在那里画了插图。a可以保留与b相同的内容,但a不应该有重复的内容恐怕MySql需要主键或uniqe索引来避免重复。非常感谢您的帮助。。我现在清楚它的用法了。。我无法创建唯一/主键。我不得不质疑和做!在数组中($data,$query\U array)来解决这个问题,但我不能使它唯一。我在那里画了插图。a可以保留与b相同的内容,但a不应该有重复的内容恐怕MySql需要主键或uniqe索引来避免重复。非常感谢您的帮助。。我现在清楚它的用法了。。我无法创建唯一/主键。我不得不质疑和做!在数组中($data,$query\U array)来解决这个问题,但我不能使它唯一。我在那里画了插图。a可以保留与b相同的内容,但a不应该有重复的内容,但我不能使其唯一。我在那里画了插图。a可以保留与b相同的内容,但a不应该有重复的内容