SQL常见问题整理(五)

8.处理重复数据

(1)防止表中出现重复数据
使用primary key索引
create table person(last_name char(20) not null,first_name char(20) not null,address char(40),primary key(last_name,first_name));
使用unique索引
create table person(last_name char(20) not null,first_name char(20) not null,address char(40),unique(last_name,first_name));
(2)处理重复的加载数据
忽略这些错误
使用insert ignore,replace或insert…on duplicate key update语句,这些语句可以改变MySQL处理重复数据的行为:
插入新行:insert ignore into person(last_name,first_name) values(‘X2’,‘Y2’);
替换原有的行:replace into person (last_name,first_name) values(‘X3’,‘Y3’);
(3)识别与统计重复数据的数量
使用可以显示重复值的计数汇总方式,如果想查看包含重复值的行,那么可以通过连接汇总信息与原来的表来显示重复的行
一般情况想,如果想识别重复的值,那么可以按照以下操作:确定哪些列包含可能重复的值,在输出中显示这些列以及count(),在group by子句中指定这些列,添加一个having子句,通过要求每组的计数大于1来去除唯一的值
select count(
),last_name,last_name from catalog_list group by last_name,first_name having count(*)>1;
(4)移除表中的重复数据
从表中选择具有唯一性的行到第二个表,然后用这个表来替换原来的表:创建一个与原表结构形同的新表,你可以使用create table…like,create table tmp like catalog_list;使用insert into… select distinct,从原始表中选择具有唯一性的行放到新表中,insert into tmp select distinct * from catalog_list;选择tmp表中的行,验证这个新表中没有重复数据,select * from tmp order by last_name,first_name;在创建好只包含唯一数据的tmp表后,用它替换原来的catalog_list表,drop table catalog_list;rename table tmp to catalog_list;这个过程最后的结果是catalog_list不再包含重复数据
使用delete…limit n删除一组特定重复行的所有行,只留下一行delete from catalog_list where last_name=‘Baxter’ and firt_name=‘Wallace’ limit 2;delete from catalog_list where last_name=‘Pinter’ and first_name=‘Marlene’ limit1;select * from catalog_list;

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值