HI,各位:      有一问题没搞明白,特此请教,望指教!谢谢!      我有一个mysql的表A,创建了唯一索引,UNIQUE KEY `iindex` (`name`,`fdate`,`id`)
      然后这个表中的数据是通过sqoop从hadoop上导入的,由于更新了hadoop的部分数据,导入过程执行了2次。
      结果发现,在这个mysql的表A中,竟然在UNIQUE KEY字段上出现了重复记录,比如,name=wuhan,fdate=2014-05-03,id=333这样的记录有2条一模一样的。发现后再次测试,仍然如此,多次导入后有3条,4条重复的记录。
      而实际上mysql表A的这个唯一索引是生效的的,当我手工进行insert时会提示duplicate entry 重复键无法插入。
      我现在疑惑的是,sqoop在进行export的时候也是进行的insert A values ('wuhan','2014-05-03','333'),('wuhan','2014-05-03','444').....,这样的操作,
      mysql的这个UNIQUE KEY约束应该是在任何insert情况下都会进行检查的吧?为什么这里会导入重复记录呢?
      有UNIQUE KEY的表,会在什么情况下被插入重复记录呢?
      谢谢!

解决方案 »

  1.   

    贴出你的 show create table 表A 以供分析。
    另外贴出 select * from 表A where name=wuhan,fdate=2014-05-03,id=333 以确信有重复记录。
      

  2.   


    多谢回复!建表语句:
    CREATE TABLE `area_ad` (
      `cname` varchar(30) NOT NULL DEFAULT '' COMMENT '城市名称',
      `pname` varchar(30) NOT NULL DEFAULT '' COMMENT '省份名称',
      `pv` int(11) NOT NULL DEFAULT '0' COMMENT 'PV数',
      `click` int(11) NOT NULL DEFAULT '0' COMMENT '点击数',
      `fdate` date NOT NULL COMMENT '日期',
      `adid` int(11) NOT NULL DEFAULT '0' COMMENT '广告id',
      UNIQUE KEY `iindex` (`cname`,`fdate`,`adid`) USING BTREE,
      KEY `idate` (`fdate`) USING BTREE,
      KEY `icname` (`cname`) USING BTREE,
      KEY `ipname` (`pname`) USING BTREE,
      KEY `iaid` (`adid`) USING BTREE
    ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(`area_ad_201402`,`area_ad_201403`,`area_ad_201404`,`area_ad_201405`)重复记录的截图:
      

  3.   

    select * from area_ad
    where cname='武汉市' order by `cname`,`fdate`,`adid`不妨尝试一下,你会找不到那条记录了。 注意 '武汉市'  <> '武汉市 '  <> '武汉 市'  <>'  武汉市' 
      

  4.   

    select `cname`,`fdate`,`adid,count(*)
    from tb
    group by `cname`,`fdate`,`adid
    应该可以看出来到底一样不一样了