当前位置: 首页 > news >正文

DB-MySQL:MySQL 处理重复数据

ylbtech-DB-MySQL:MySQL 处理重复数据

 

1.返回顶部
1、

MySQL 处理重复数据

有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。

本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据。


防止表中出现重复数据

你可以在MySQL数据表中设置指定的字段为  PRIMARY KEY(主键) 或者  UNIQUE(唯一) 索引来保证数据的唯一性。

 

让我们尝试一个实例:下表中无索引及主键,所以该表允许出现多条重复记录。

CREATE TABLE person_tbl
(
    first_name CHAR(20), last_name CHAR(20), sex CHAR(10) );

如果你想设置表中字段first_name,last_name数据不能重复,你可以设置双主键模式来设置数据的唯一性, 如果你设置了双主键,那么那个键的默认值不能为NULL,可设置为NOT NULL。如下所示:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL, last_name CHAR(20) NOT NULL, sex CHAR(10), PRIMARY KEY (last_name, first_name) );

如果我们设置了唯一索引,那么在插入重复数据时,SQL语句将无法执行成功,并抛出错。

INSERT IGNORE INTO与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

以下实例使用了INSERT IGNORE INTO,执行后不会出错,也不会向数据表中插入重复数据:

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name) -> VALUES( 'Jay', 'Thomas'); Query OK, 1 row affected (0.00 sec) mysql> INSERT IGNORE INTO person_tbl (last_name, first_name) -> VALUES( 'Jay', 'Thomas'); Query OK, 0 rows affected (0.00 sec)

INSERT IGNORE INTO当插入数据时,在设置了记录的唯一性后,如果插入重复数据,将不返回错误,只以警告形式返回而REPLACE INTO into如果存在primary 或 unique相同的记录,则先删除掉。再插入新记录

另一种设置数据的唯一性方法是添加一个UNIQUE索引,如下所示:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL, last_name CHAR(20) NOT NULL, sex CHAR(10), UNIQUE (last_name, first_name) );

统计重复数据

以下我们将统计表中 first_name 和 last_name的重复记录数:

mysql> SELECT COUNT(*) as repetitions, last_name, first_name -> FROM person_tbl -> GROUP BY last_name, first_name -> HAVING repetitions > 1;

以上查询语句将返回 person_tbl 表中重复的记录数。 一般情况下,查询重复的值,请执行以下操作:

  • 确定哪一列包含的值可能会重复。
  • 在列选择列表使用COUNT(*)列出的那些列。
  • 在GROUP BY子句中列出的列。
  • HAVING子句设置重复数大于1。

过滤重复数据

如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

你也可以使用 GROUP BY 来读取数据表中不重复的数据:

mysql> SELECT last_name, first_name
    -> FROM person_tbl -> GROUP BY (last_name, first_name);

删除重复数据

如果你想删除数据表中的重复数据,你可以使用以下的SQL语句:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl  GROUP BY (last_name, first_name, sex); mysql> DROP TABLE person_tbl; mysql> ALTER TABLE tmp RENAME TO person_tbl;

当然你也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);
2、
2.返回顶部
 
3.返回顶部
 
4.返回顶部
 
5.返回顶部
1、
http://www.runoob.com/mysql/mysql-handling-duplicates.html
2、
 
6.返回顶部
 
warn作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/storebook/p/10207649.html

相关文章:

  • 【[HEOI2016/TJOI2016]游戏】
  • iOS调用系统发送短信和邮件分享
  • ORM简介
  • Qt支持哪些硬件通信协议???
  • 不用代理IP加快速度会被封吗?
  • 基于zookeeper实现分布式锁
  • 微信小程序之----接口调用方式
  • django 的后台管理
  • Vue 目录
  • 蒟蒻的作文
  • PLC之六部十层电梯整体框架
  • js实现数组去重的几种方法
  • MapReduce编程:词频统计
  • Python基础之文件
  • 使用vuepress搭建文档管理/博客
  • 《Java编程思想》读书笔记-对象导论
  • 【个人向】《HTTP图解》阅后小结
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Druid 在有赞的实践
  • Java IO学习笔记一
  • java8-模拟hadoop
  • JavaScript DOM 10 - 滚动
  • JS数组方法汇总
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Koa2 之文件上传下载
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • ng6--错误信息小结(持续更新)
  • Promise初体验
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React Native移动开发实战-3-实现页面间的数据传递
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • supervisor 永不挂掉的进程 安装以及使用
  • 代理模式
  • 反思总结然后整装待发
  • 基于组件的设计工作流与界面抽象
  • 简单易用的leetcode开发测试工具(npm)
  • 那些被忽略的 JavaScript 数组方法细节
  • 写代码的正确姿势
  • 运行时添加log4j2的appender
  • 正则表达式小结
  • 白色的风信子
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Android开发者必备:推荐一款助力开发的开源APP
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • zabbix3.2监控linux磁盘IO
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # Java NIO(一)FileChannel
  • #includecmath
  • $L^p$ 调和函数恒为零
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (floyd+补集) poj 3275
  • (Python第六天)文件处理
  • (阿里云万网)-域名注册购买实名流程
  • (笔试题)合法字符串
  • (一)Java算法:二分查找