MySQL数据表合并去重的简单实现方法

 更新时间:2019年05月28日 11:38:51   作者:aleo  
这篇文章主要给大家介绍了关于MySQL数据表合并去重的简单实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

场景:

爬取的数据生成数据表,结构与另一个主表相同,需要进行合并+去重

解决:(直接举例)

首先创建两个表pep,pep2,其中pep是主表

CREATE TABLE IF NOT EXISTS `pep/pep2`(
`id` INT UNSIGNED AUTO_INCREMENT,
`no` VARCHAR(100) NOT NULL,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后向pep中插入两条数据,pep2中插入一条与pep中相同的一条数据

insert into pep(no) values('abc');
insert into pep(no) values('caa');

insert into pep2(no) values('abc');

将pep2的数据插入pep中

insert into pep (no) select no from pep2;

分组去重创建新的临时表tmp

create table tmp select id,no from pep group by no;

注意:创建完这个表的id字段类型已经不是主键自增

 可能也会报错
 ```Syntax error or access violation: 1055 Expression #1 of SELECT 
 list is not in GROUP BY clause and contains nonaggregated 
 column 'XXX.Y.ZZZZ' which is not functionally dependent on 
 columns in GROUP BY clause; this is incompatible with
 sql_mode=only_full_group_by
 ```
 解决:执行以下两个命令:
 ```
 mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
 
 mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
 ```

删除pep表,并将tmp表重命名为pep

drop table pep;
alter table tmp rename to pep;

查看desc结构和select * from pep发现id的字段类型变了,这里需要改回原来的类型;

alter table pep add primary key (id);
alter table pep modify id int auto_increment;

还有可以使用join来做去重,更快的还可以添加一个字段(可以是几个字段+起来的的md5值),给这个字段创建一个唯一索引unique,以后插入数据的时候,自动回过滤掉重复的数据。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • MySQL数据库约束详解

    MySQL数据库约束详解

    mysql常见约束有:1、非空约束“not null”;2、唯一性约束“unique”;3、主键约束“primary key”;4、外键约束“foreign key”;5、默认值约束“Default”等等。
    2022-10-10
  • Mysql的max_allowed_packet设定

    Mysql的max_allowed_packet设定

    今天小编就为大家分享一篇关于Mysql的max_allowed_packet设定,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • mysql通过ssl的方式生成秘钥具体生成步骤

    mysql通过ssl的方式生成秘钥具体生成步骤

    在my.cnf末尾端设置ssl 参数, 然后重新启动mysql服务即可,通过openssl生成证书的配置, 在mysql db server上生成秘钥,具体步骤如下,感兴趣的朋友可以参考下哈
    2013-06-06
  • Mysql和SQLServer驱动连接的实现步骤

    Mysql和SQLServer驱动连接的实现步骤

    本文主要介绍了Mysql和SQL Server的驱动连接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Mysql Innodb存储引擎之索引与算法

    Mysql Innodb存储引擎之索引与算法

    索引对数据库有多重要,我想大家都已经知道了吧,下面这篇文章主要给大家介绍了关于Mysql Innodb存储引擎之索引与算法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Mysql中JDBC的三种查询(普通、流式、游标)详解

    Mysql中JDBC的三种查询(普通、流式、游标)详解

    这篇文章主要介绍了Mysql中JDBC的三种查询(普通、流式、游标)详解,JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的,需要的朋友可以参考下
    2023-08-08
  • 简单整理MySQL的日志操作命令

    简单整理MySQL的日志操作命令

    这篇文章主要介绍了MySQL的日志操作命令,其中重点讲述了MySQL的日志删除方法,需要的朋友可以参考下
    2015-12-12
  • MySQL通过show status查看、explain分析优化数据库性能

    MySQL通过show status查看、explain分析优化数据库性能

    这篇文章介绍了MySQL通过show status查看、explain分析优化数据库性能的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • MySQL中主键为0与主键自排约束的关系详解(细节)

    MySQL中主键为0与主键自排约束的关系详解(细节)

    这篇文章主要给大家介绍了关于MySQL中主键为0与主键自排约束的关系的相关资料,主要介绍的是其中的一些非常细的细节,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • mysql5.6.8源码安装过程

    mysql5.6.8源码安装过程

    这篇文章主要介绍了mysql5.6.8源码安装过程,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论