【问题标题】:Inserting records in Mysql with INSERT IGNORE and NULL values使用 INSERT IGNORE 和 NULL 值在 Mysql 中插入记录
【发布时间】:2010-06-10 16:36:26
【问题描述】:

我有一个带有多个字段的分区表 InnoDB。 我试图避免插入时出现重复。

假设:

Field1 int null
Field2 int null
Field3 int null
Field4 int null
Field5 int null

我在这些字段上创建了一个唯一索引。 我尝试使用 NULL 值插入一些记录,然后尝试使用 MySql 上的 IGNORE 功能重新插入它们。

不幸的是,当使用 NULL 值时,它似乎复制了记录。 如果我尝试使用零而不是 NULL 情况一切正常,但我确实需要那里的空值。

有什么想法吗?

【问题讨论】:

  • 请将答案标记为正确。 a1ex07 的回答帮助我解决了类似的情况。

标签: mysql insert duplicates


【解决方案1】:

这就是 NULL 的工作原理。请记住,两个 NULL 值的相等比较的结果是 NULL(在逻辑表达式中计算为 FALSE)。因此,即使您对允许 NULL 值的列 Field1 具有唯一约束,该表也可以有超过 1 条记录,其中 Field1 的值为 NULL。如果您想以不同的方式处理 NULL,除了唯一约束之外,您还需要编写 BEFORE INSERT/UPDATE 触发器来检查表中是否有 Field1 为 NULL 的记录(并引发错误以防止更新)。

【讨论】:

  • 那么,如果我这样做,RAISE ERROR 将忽略该唯一记录,而我的完整插入将被忽略?有没有办法只忽略那条记录?谢谢!