Mysql用 INSERT IGNORE 批量插入,unique约束中的字段null的问题

要对某个表table进行批插入,但是不可以插入重复的记录

表中有一个唯一约束 (phone, sales)

其中sales可以为null

现在要用INSERT IGNORE插入一批数据,里面只有(phone)

发现重复插入同一批数据是可以成功的,因为sales为null是可以重复的

这种状况如何解决啊?

阅读 4.4k
3 个回答

unique还可以为null,当然不行了,改为not null default ''吧

正如上面老兄说的,unique的字段不要设置为null,使用not null default 'xxx'的方式代替。建表要规范呀。

UNIQUE INDEX allows multiple NULL values for columns. MySQL唯一索引是允许多个Null存在的。
MySQL Bugs: #8173: unique index allows duplicates with null values

依旧是建议sales设置个默认值,先修改表结构,然后剔除旧的重复数据,幸好group by认为null与null是一致的,大概SQL如下,建议先备份表测试:

delete from ** where id not in (select mid from (select min(id) mid from ** group by phone, sales)t)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题