1、问题描述
今天刚好有一个需求,需要插入数据时去重。所以第一下就想到了insert ignore into方法,但是使用过程中,发现虽然设置了唯一键,但插入时还是出现了重复插入的情况。
具体信息如下,表的约束设置如下:
有一个主键,和一个唯一键索引idx_s******,这个唯一索引是一个组合索引,里面由4个字段组成。
插入时使用的sql数据是:
INSERT INTO ***_info
(***_key, ***_no, ***_no, ***_id, ***_user)
VALUES(1, '123', NULL, 1, '-1');
前面4个字段,就是唯一索引的组合字段,所以正常情况下,插入应该是可以达到去重的效果的。然鹅,测试插入时,重复数据还是出现了。。。瞬间懵逼,开始找原因咯~~~
2、解决方案
后来分析,是否是字段顺序和组合索引的字段顺序不一致导致,还是说因为其中某个字段的插入值为NULL才导致的呢。经过测试后,发现是后者原因。
所以解决办法就是,将这个NULL换成1个默认值,比如我这里写入了一个空字符串,如此便可以过滤掉重复数据插入啦。