mysql c库 键值重复_MySQL 删除数据库中重复数据方法小结

MySQL删除重复记录
本文提供了一种在MySQL中删除重复记录的方法,通过多步骤操作确保只保留一条记录,并附带了具体的SQL语句实例。

刚开始,根据我的想法,这个很简单嘛,上sql语句

delete from zqzrdp where tel in (select min(dpxx_id) from zqzrdp group by tel having count(tel)>1);

执行,报错!!~!~

431c9f7319ae0a0860e6dfbc055319a8.png

异常意为:你不能指定目标表的更新在FROM子句。傻了,MySQL 这样写,不行,让人郁闷。

难倒只能分步操作,蛋疼

以下是网友写的,同样是坑爹的代码,我机器上运行不了。

1. 查询需要删除的记录,会保留一条记录。

select a.id,a.subject,a.RECEIVER from test1 a left join (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b on a.id< b.bid where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid

2. 删除重复记录,只保留一条记录。注意,subject,RECEIVER 要索引,否则会很慢的。

delete a from test1 a, (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid;

3. 查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

4. 删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

5.删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

看来想偷懒使用一句命令完成这个事好像不太显示,还是老老实实的分步处理吧,思路先建立复制一个临时表,然后对比临时表内的数据,删除主表里的数据

alter table tableName add autoID int auto_increment not null;

create table tmp select min(autoID) as autoID from tableName group by Name,Address;

create table tmp2 select tableName.* from tableName,tmp where tableName.autoID = tmp.autoID;

drop table tableName;

rename table tmp2 to tableName;

MySQL数据完整性控制实验小结 MySQL是目前广泛使用的关系型数据库管理系统,数据完整性是保证数据质量和正确性的重要方面。本次实验主要介绍如何在MySQL中实现数据完整性控制,包括以下几个方面: 1. 主键约束 主键约束是表中用来唯一标识每一行数据的一列或一组列,主键的值必须唯一且不能为空。在MySQL中,可以通过以下语句创建主键约束: ``` CREATE TABLE 表名 ( 列1 数据类型 PRIMARY KEY, 列2 数据类型, ... ); ``` 2. 外键约束 外键约束是表中用来与另一张表建立关联关系的一列或一组列,外键的值必须是另一张表的主键值或者为空。在MySQL中,可以通过以下语句创建外键约束: ``` CREATE TABLE 表名1 ( 列1 数据类型 PRIMARY KEY, 列2 数据类型, ... ); CREATE TABLE 表名2 ( 列1 数据类型 PRIMARY KEY, 列2 数据类型, 列3 数据类型, ... FOREIGN KEY (列3) REFERENCES 表名1(列1) ); ``` 其中,表名2中的列3是一个外键,它与表名1的主键列1建立了关联关系。 3. 检查约束 检查约束是对表中数据进行条件限制的一种方式,可以通过检查约束来保证数据的正确性。在MySQL中,可以通过以下语句创建检查约束: ``` CREATE TABLE 表名 ( 列1 数据类型, 列2 数据类型, ... CONSTRAINT 检查约束名 CHECK (条件表达式) ); ``` 其中,条件表达式是对列1、列2等列进行限制的条件表达式。 4. 非空约束 非空约束是对表中某一列进行非空限制的一种方式,可以通过非空约束来保证数据的正确性。在MySQL中,可以通过以下语句创建非空约束: ``` CREATE TABLE 表名 ( 列1 数据类型 NOT NULL, 列2 数据类型, ... ); ``` 其中,列1是被设置为非空约束的列。 本次实验通过实例演示了如何在MySQL中实现数据完整性控制,包括主键约束、外键约束、检查约束和非空约束。这些约束可以保证数据的正确性和完整性,提高了数据库的可靠性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值