我有一个分区表InnoDB,有几个字段。 我试图避免重复插入。
让我们说:
Field1 int null
Field2 int null
Field3 int null
Field4 int null
Field5 int null
我在这些字段上创建了一个UNIQUE索引。 我尝试插入一些带有NULL值的记录,然后尝试在MySql上使用IGNORE功能重新插入它们。
不幸的是,它似乎在使用NULL值时复制了记录。 如果我尝试使用零而不是NULL情况一切正常,但我确实需要空值。
有什么想法吗?
答案 0 :(得分:6)
这就是NULL的工作原理。请记住,两个NULL值的相等比较结果为NULL(在逻辑表达式中计算结果为FALSE)。因此,即使您对列Field1
具有允许NULL值的唯一约束,该表也可以具有多条记录,其中Field1
的值为NULL。如果要以不同方式处理NULL,除了唯一约束之外,还需要编写BEFORE INSERT / UPDATE触发器,以检查表中是否有Field1
IS为空的记录(并引发错误以防止更新)。