限制数据重复的方式:表上增加主键(Primary Key)或增加唯一性索引(Unique)
 
 
主键对重复资料进行限制,这样资料在导入时就无法重复插入

  1. create table primary_t(
  2. last_name varchar(20),
  3. first_name varchar(20),
  4. sex varchar(8),
  5. primary key(last_name,first_name)
  6. )engine=innodb default charset=utf8;
  7.  
  8. show table status like 'primary_t'\G
  9.  
  10. show index from primary_t\G
  11.  
  12. 模拟插入两笔有主键约束的资料
  13. insert into primary_t(last_name,first_name,sex) values('Frank','Li','Man'),('Frank','Li','Man'),('Coco','Li','Woman');
  14.  
  15. ERROR 1062 (23000): Duplicate entry 'Frank-Li' for key 'PRIMARY'
  16.  
  17. insert into primary_t(last_name,first_name,sex) values('Frank','Li','Man'),('Frank','Cai','Man'),('Coco','Li','Woman');
  18.  
  19. mysql> select * from primary_t;
  20. +-----------+------------+-------+
  21. | last_name | first_name | sex |
  22. +-----------+------------+-------+
  23. | Coco | Li | Woman |
  24. | Frank | Cai | Man |
  25. | Frank | Li | Man |
  26. +-----------+------------+-------+
  27. 3 rows in set (0.00 sec)
 
唯一性索引对复制资料进行限制

  1. create table unique_t(
  2. last_name varchar(20),
  3. first_name varchar(20),
  4. sex varchar(8),
  5. unique index unique_name(last_name,first_name)
  6. )engine=innodb default charset=utf8;
  7.  
  8. show table status like 'unique_t'\G
  9.  
  10. show index from unique_t\G
  11.  
  12. 模拟插入两笔有唯一性约束的资料
  13. insert into unique_t(last_name,first_name,sex) values('Frank','Li','Man'),('Frank','Li','Man'),('Coco','Li','Woman');
  14.  
  15. ERROR 1062 (23000): Duplicate entry 'Frank-Li' for key 'unique_name'
  16.  
  17. insert into unique_t(last_name,first_name,sex) values('Frank','Li','Man'),('Frank','Cai','Man'),('Coco','Li','Woman');
  18. mysql> select * from unique_t;
  19. +-----------+------------+-------+
  20. | last_name | first_name | sex |
  21. +-----------+------------+-------+
  22. | Frank | Li | Man |
  23. | Frank | Cai | Man |
  24. | Coco | Li | Woman |
  25. +-----------+------------+-------+
  26. 3 rows in set (0.00 sec)
 
对资料的统计

  1. create table count_t(
  2. last_name varchar(20),
  3. first_name varchar(20),
  4. sex varchar(8)
  5. )engine=innodb default charset=utf8;
  6.  
  7. insert into count_t values('Frank','A','Man'),
  8. ('Frank','B','Man'),
  9. ('Frank','C','Woman'),
  10. ('Frank','D','Man'),
  11. ('Frank','E','Man'),
  12. ('Frank','F','Woman'),
  13. ('Frank','G','Man'),
  14. ('Frank','H','Man'),
  15. ('Frank','I','Woman'),
  16. ('Coco','A','Woman'),
  17. ('Coco','B','Man'),
  18. ('Coco','C','Man'),
  19. ('Coco','D','Man'),
  20. ('Coco','E','Man'),
  21. ('Coco','F','Man'),
  22. ('Coco','G','Woman'),
  23. ('Coco','H','Woman'),
  24. ('Alex','B','Man'),
  25. ('ALex','C','Man'),
  26. ('ALex','D','Man'),
  27. ('Alex','E','Man'),
  28. ('ALex','F','Man'),
  29. ('ALex','G','Woman'),
  30. ('ALex','H','Woman')
  31. ;
  32.  
  33. commit;
  34.  
  35. 按各个列进行分组统计
  36. select last_name,count(*) from count_t group by last_name;
  37.  
  38. select first_name,count(*) from count_t group by first_name;
  39.  
  40. select sex,count(*) from count_t group by sex;
  41.  
  42. mysql> select last_name,count(*) from count_t group by last_name;
  43. +-----------+----------+
  44. | last_name | count(*) |
  45. +-----------+----------+
  46. | Alex | 7 |
  47. | Coco | 8 |
  48. | Frank | 9 |
  49. +-----------+----------+
  50. 3 rows in set (0.00 sec)
  51.  
  52. mysql> select first_name,count(*) from count_t group by first_name;
  53. +------------+----------+
  54. | first_name | count(*) |
  55. +------------+----------+
  56. | A | 2 |
  57. | B | 3 |
  58. | C | 3 |
  59. | D | 3 |
  60. | E | 3 |
  61. | F | 3 |
  62. | G | 3 |
  63. | H | 3 |
  64. | I | 1 |
  65. +------------+----------+
  66. 9 rows in set (0.00 sec)
  67.  
  68. mysql> select sex,count(*) from count_t group by sex;
  69. +-------+----------+
  70. | sex | count(*) |
  71. +-------+----------+
  72. | Man | 16 |
  73. | Woman | 8 |
  74. +-------+----------+
  75. 2 rows in set (0.00 sec)
  76.  
  77. 对分组的统计在进行限定,having 大于等于8次的记录
  78. select last_name ,count(*) from count_t group by last_name having count(*) >=8;
  79.  
  80. mysql> select last_name ,count(*) from count_t group by last_name having count(*) >=8;
  81. +-----------+----------+
  82. | last_name | count(*) |
  83. +-----------+----------+
  84. | Coco | 8 |
  85. | Frank | 9 |
  86. +-----------+----------+
  87. 2 rows in set (0.00 sec)
 
 
 
对资料进行去重操作,主要使用distinct函数

  1. select distinct last_name from count_t;
  2.  
  3. select distinct first_name from count_t;
  4.  
  5. select distinct sex from count_t;
 
对已有资料的表进行去重操作

  1. insert into count_t values('Xi','Xi','Man'),('Xi','Xi','Man');
  2.  
  3. 增加主键约束,加入ignore,忽悠重复的资料
  4.  
  5. alter ignore table count_t
  6. add primary key(last_name,first_name);
  7.  
  8. select * from count_t where last_name='Xi';
  9.  
  10. mysql> alter ignore table count_t
  11. -> add primary key(last_name,first_name);
  12. Query OK, 26 rows affected (0.01 sec)
  13. Records: 26 Duplicates: 1 Warnings: 0
  14.  
  15. mysql> select * from count_t where last_name='Xi';
  16. +-----------+------------+------+
  17. | last_name | first_name | sex |
  18. +-----------+------------+------+
  19. | Xi | Xi | Man |
  20. +-----------+------------+------+
  21. 1 row in set (0.00 sec)
使用group by方式也可去除重复资料
  1.  
create table count_t0 as select last_name,first_name,sex from count_t group by last_name,first_name,sex;
  1.  
 

MySQL->处理重复数据[20180517]的更多相关文章

  1. mysql删除重复数据只保留一条

    mysql删除重复数据只保留一条 新建一张测试表: CREATE TABLE `book` ( `id` char(32) NOT NULL DEFAULT '', `name` varchar(10 ...

  2. SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法

    create proc insertLog@Title nvarchar(50),@Contents nvarchar(max),@UserId int,@CreateTime datetimeasi ...

  3. 三十、MySQL 处理重复数据

    MySQL 处理重复数据 有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 本章节我们将为大家介绍如何防止数据表出现重复数据及如何删 ...

  4. DB-MySQL:MySQL 处理重复数据

    ylbtech-DB-MySQL:MySQL 处理重复数据 1.返回顶部 1. MySQL 处理重复数据 有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需 ...

  5. MySQL 处理重复数据

    有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 本博文我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据. 防 ...

  6. MYSQL删除重复数据

     delete from co_jobinformation cwhere c.name in (select cc.name from co_jobinformation cc group by   ...

  7. mysql 删除重复数据,并保存最新一条数据

    删除重复行 DELETE FROM ecm_member_login_session WHERE (number , client_code) IN ( ) AND update_time NOT I ...

  8. MySQL中删除重复数据的简单方法,mysql删除重复数据

    MYSQL里有五百万数据,但大多是重复的,真实的就180万,于是想怎样把这些重复的数据搞出来,在网上找了一圈,好多是用NOT IN这样的代码,这样效率很低,自己琢磨组合了一下,找到一个高效的处理方式, ...

  9. MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据

    开发背景: 最近在做一个批量数据导入到MySQL数据库的功能,从批量导入就可以知道,这样的数据在插入数据库之前是不会进行重复判断的,因此只有在全部数据导入进去以后在执行一条语句进行删除,保证数据唯一性 ...

  10. mysql处理重复数据

    有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 防止表中出现重复数据 你可以在MySQL数据表中设置指定的字段为 PRIMARY ...

随机推荐

  1. 控制HTML页面内容不能选中的方法

    方法有二 一: css 方法 user-seletct: none;-webkit-user-seletct: none;-moz-user-seletct: none;-ms-user-seletc ...

  2. 排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题

    尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. 当由于准备步骤不当,或者在从门户捕获映像期间选择了错误的设置而导致 OS 映像无法加载时,将发生预配失败. 当群集 ...

  3. 使用ifstream和getline读取文件内容[c++] ZZ

      假设有一个叫 data.txt 的文件, 它包含以下内容: Fry: One Jillion dollars.[Everyone gasps.]Auctioneer: Sir, that's no ...

  4. 数据库常用SQL用法

    查找某列数据包含某一字符串: SELECT * FROM table WHERE column LIKE '%string%' 查找某列数据以某些字符串开头: SELECT * FROM table ...

  5. MVC Controller的激活

    各Controller的继承关系 Controller最重要的是对Execute方法的调用,当目标Controller对象被激活后,对请求的后续处理和最终响应均是通过执行这个Execute方法来完成. ...

  6. 《C++ Primer Plus》读书笔记之五—函数-C++的编程模块

    函数-C++的编程模块   1.C++对于返回值的类型有一定的限制:不能是数组,但可以是其他任何类型——整数.浮点数.指针,甚至可以是结构和对象(有趣的是,虽然C++函数不能直接返回数组,但可以将数组 ...

  7. 套接字和标准I/O缓冲区

    设置标准I/O函数缓冲区的主要目的是为了提高性能.但套接字中的缓冲主要是为了实现TCP协议而设立的.例如,TCP传输中丢失数据时将再次传递,而再次发送数据则意味着在某地保存了数据.存在什么地方呢?套接 ...

  8. WINDOW各种命令

  9. Nginx配置文件nginx.conf详细说明文档

    在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集于网络. user    www-data;                        #运行用户 worker_pro ...

  10. iOS自动化-iOS录屏xrecord及解决iPhone设备不显示的问题

    github地址:https://github.com/WPO-Foundation/xrecord 安装方法: git clone https://github.com/WPO-Foundation ...