`
xdw1626
  • 浏览: 174440 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 删除重复记录的高效方法 && mysql 删除重复记录方法

阅读更多
oracle 删除重复记录的高效方法 && mysql 删除重复记录方法
2009年02月12日 星期四 16:45

  COL1中有重复记录(COL1,COL2为主键),如何删除
  
  1、有少数重复记录(在col1,col2上有索引比较好)
  
  DELETE T
  WHERE (COL1,COL2) IN
  (SELECT COL1,COL2 FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
  AND
  ROWID NOT IN
  (SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
  
  2、大部份记录有重复记录
  
  DELETE T WHERE ROWID NOT IN
  (SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2)
  
  3、其他写法
  
  DELETE T WHERE ROWID IN
  (SELECT A.ROWID FROM T A,T B
  WHERE A.COL1=B.COL1 AND A.COL2 = B.COL2 AND A.ROWID > B.ROWID)
  
  ######################################
  
  10. 删除重复记录
  
  最高效的删除重复记录方法 ( 因为使用了ROWID)
  
  DELETE FROM EMP E
  
  WHERE E.ROWID > (SELECT MIN(X.ROWID)
  
  FROM EMP X
  
  WHERE X.EMP_NO = E.EMP_NO);
  
  11. 用TRUNCATE替代DELETE
  
  当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是
  
  恢复到执行删除命令之前的状况)
  
  而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.
  
  (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)
  
  12. 尽量多使用COMMIT
  
  只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:
  
  COMMIT所释放的资源:
  
  a. 回滚段上用于恢复数据的信息.
  
  b. 被程序语句获得的锁
  
  c. redo log buffer 中的空间
  
  d. ORACLE为管理上述3种资源中的内部花费

 

 

 

mysql 删除重复记录

如果数据库的设计不规范,某个表没有主健,那么肯定会有重复记录的现象,或者存在这种危险。在oracle中,可以通过rowid来删除重复记录,而mysql如何实现呢:
1、准备基表test,待测试。
create table test (c1 smallint,c2 smallint);
insert into test values(1,1);
insert into test values(1,1);
insert into test values(1,2);
insert into test values(2,2);
insert into test values(2,2);
2、创建一个临时表,结构与原表一致,但没有数据。
create table tmp as select * from test where 1=2;
3、将原表数据插入临时表,重复记录合为一条记录。
insert into tmp select distinct * from test;
4、查看一下基表和临时表的数据。
mysql> select * from test;
+------+------+
| c1 | c2 |
+------+------+
| 1 | 1 |
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 2 | 2 |
+------+------+
5 rows in set (0.00 sec)
mysql> select * from tmp;
+------+------+
| c1 | c2 |
+------+------+
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
+------+------+
3 rows in set (0.00 sec)
5、删除基表数据
mysql> delete from test;
Query OK, 5 rows affected (0.02 sec)
6、将临时表数据插回基表
mysql> insert into test select * from tmp;
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
7、查看一下基表的数据
mysql> select * from test;
+------+------+
| c1 | c2 |
+------+------+
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
+------+------+
3 rows in set (0.00 sec)
8、数据准确,完成基表重复记录的删除。
方法二:
INSERT INTO "tables1" SELECT name,id FROM "tables" GROUP BY name
借用一个中间表~ 把不复的数据先复制到中间表,再将原表删除,并且将中间表修名成现有表~ 不过INSERT INTO 表 SELECT 这种语法适合mysql4.0以上版本
方法三:(本人经常使用的,特别表大的情况,此法算是效率比较高的了)
新建一个临时表
create table tmp as select * from youtable group by name
删除原来的表
drop table youtable
重命名表
alter table tmp rename youtable

分享到:
评论

相关推荐

    数据库删除完全重复和部分关键字段重复的记录

    注意,Oracle的`ROWID`是行的物理地址,可以高效地标识并删除重复记录。在MySQL和SQL Server中,由于没有内置的`ROWID`机制,需要借助额外的`autoID`字段来实现。 总结来说,处理数据库中的重复记录是数据管理的...

    使用JDBC连接Oracle,MySql,SQLServer数据库

    BaseDao是数据访问层的一个基础类,通常包含通用的CRUD(创建、读取、更新、删除)方法,以减少重复代码。例如,BaseDao可能有一个executeSQL方法,接受SQL语句和参数,然后使用PreparedStatement执行。 测试部分,...

    sql数据库一些查找删除方法.docx

    在SQL数据库管理中,查找和删除重复数据是一项常见的任务,尤其在大数据量的环境中,保持数据的一致性和准确性至...在实际操作中,应根据具体数据库类型(如MySQL、SQL Server、Oracle等)和数据量大小选择合适的方法。

    C# MySQL 数据库操作类 (包含MySql.Data.Dll文件) 常用方法二三十多个

    本资源提供了一个C#编写的MySQL数据库操作类,包含了MySql.Data.Dll库,这使得开发者可以方便地进行数据库查询、插入、更新和删除等操作。这个类库集成了大约二三十个常用的方法,覆盖了数据库操作的基础功能。 ...

    Delphi找出数据库重复数据..rar

    如果发现重复,可以使用TDataSet的Delete方法删除重复记录,或者将它们标记出来供后续处理。 6. **数据校验和清理**:在处理完重复数据后,记得更新到数据库中,可以使用TDataSet的ApplyUpdates方法将更改提交到...

    MySQL学习笔记 MySQL学习笔记

    1. DBMS(数据库管理系统):是用于创建、操作和管理数据库的软件,如MySQL、Oracle、SQL Server等。 2. DB(数据库):是通过DBMS存储和管理的一系列有组织的数据集合。 3. SQL:是用于与数据库进行交互的标准化...

    MySQL数据库相关课件PPT

    MySQL数据库是全球最受欢迎的开源关系型数据库管理系统之一,它以其高效、可靠和易于维护的特点,在Web开发、企业级应用和数据分析等领域广泛应用。本课件PPT涵盖了MySQL的基础知识到高级特性的深入理解,旨在帮助...

    Mysql经典面试题答案

    - **问题描述**:如果一张表中有ID自增主键,在插入17条记录后删除了最后三条记录(即第15、16、17条),然后重启MySQL服务,再次插入一条记录时,该记录的ID会是18还是15? - **知识点**:MySQL的自增主键(AUTO_...

    MySQL面试题(含答案).pdf

    - 删除记录并重启MySQL后,插入新记录的ID将是18,因为自增ID不会回退。 7. CHAR_LENGTH与LENGTH的区别: - CHAR_LENGTH计算字符数,不考虑字符编码。 - LENGTH计算字节数,受字符编码影响,例如在Unicode中会有...

    MySQL基础知识总结

    `,通过`where`子句设置查询条件,`as`用于给字段设置别名,`distinct`用于去除重复记录。 总的来说,MySQL的基础知识涵盖了数据库的基本概念、分类、常用操作以及表和记录的管理。掌握这些知识对于数据库的日常...

    MySQL55题答案.pdf

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,以其高效、可靠和易用性著称。以下是针对提供的文件内容中涉及的一些MySQL知识点的详细解释: 1. **自增主键**:自增主键是一种特殊类型的列,通常用于标识表中...

    全国各地省市区地址信息MySQL

    例如,省份信息只在`provinces`表中出现一次,而不是在每个城市或区县记录中重复。通过外键约束,可以确保数据的完整性和一致性。 在实际应用中,这样的数据库可以用于多种用途,如: 1. 地图服务:为用户提供地理...

    Mysql数据库基本知识文档

    它由瑞典的MySQL AB公司开发,现在归Oracle公司所有。MySQL以其高效、稳定和易用性著称,是初学者和专业人士理想的数据库工具。 关系型数据库管理系统(RDBMS)如MySQL,基于关系理论,将数据组织成表格形式,每个...

    CSDN Oracle 版精华帖荟萃

    10. 剔重SQL的讨论:剔除重复数据的SQL查询在数据清洗和维护中非常常见,通过特定的SQL语句或存储过程可以有效剔除重复记录。 11. 网易数据库笔试题:网易作为国内知名的互联网公司,其笔试题常考察应聘者数据库...

    常见MySQL面试题汇总

    5. **MySQL相对于Oracle的优势**:MySQL开源、免费,更便携,有图形界面管理工具,如MySQL Query Browser。 6. **FLOAT与DOUBLE的区别**:FLOAT存储8位精度,4字节;DOUBLE存储18位精度,8字节。 7. **CHAR_LENGTH...

    mysql5.7文档英文版-html格式.zip

    MySQL 5.7是Oracle公司推出的数据库管理系统的一个重要版本,其文档是理解、学习和使用这一版本的关键资源。这份"mysql5.7文档英文版-html格式.zip"包含了MySQL 5.7的完整说明,以HTML格式呈现,方便用户离线查阅和...

    MYSQL与MARIADB学习指南-源SQL

    1. SQL基础:如SELECT语句用于查询数据,INSERT用于插入记录,UPDATE用于更新现有数据,DELETE用于删除记录。 2. 数据类型:了解各种数据类型,如INT、VARCHAR、DATE等,以及何时使用它们。 3. 表设计:理解数据库...

    mysql资源,包括32位,64位

    MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它由瑞典MySQL AB公司开发,后被Oracle公司收购。MySQL以其高效、稳定、易用和免费(对于大多数商业用途)的特点,成为了互联网上许多网站和应用的首选...

    2023年,MySQL最新最详细的教程资源 详细讲解了MySQL的各种用法

    它包括数据查询、数据更新、数据插入和数据删除等功能,适用于各种数据库系统,如MySQL、Oracle和SQL Server等。 在数据库方面,MySQL是一个开源的DBMS,提供高效、可靠且易于使用的数据库服务。数据库是一个存储...

Global site tag (gtag.js) - Google Analytics