老莫的笔记本  
  
查看: 1161|回复: 0

MYSQL 重复数据的处理

[复制链接]

662

主题

878

帖子

5143

积分

超级版主

Rank: 8Rank: 8

积分
5143
发表于 2018-7-28 00:10:15 | 显示全部楼层 |阅读模式
1.防止表中出现重复数据:  【可以在MYSQL 数据表中设置新字段为 PRMARY KEY 主键 或者UNQUE 索引来确保数据的唯一性。】
  1. CREATE TABLE person_tbl
  2. (
  3.    first_name CHAR(20) NOT NULL,
  4.    last_name CHAR(20) NOT NULL,
  5.    sex CHAR(10),
  6.    PRIMARY KEY (last_name, first_name)
  7. );
复制代码
备注:如果设置了first_name,last_name不能重复,可以使用双主键来设置数据的唯一性

如果设置了唯一索引,那么数据重复时 sql 语句无法执行成功,并跑出错
  1. mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
  2.     -> VALUES( 'Jay', 'Thomas');
  3. Query OK, 1 row affected (0.00 sec)
  4. mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
  5.     -> VALUES( 'Jay', 'Thomas');
  6. Query OK, 0 rows affected (0.00 sec)
复制代码
另一种设置数据唯一性的方法就是添加一个uniqe索行 如上!

统计重复数据
  1. mysql> SELECT COUNT(*) as repetitions, last_name, first_name
  2.     -> FROM person_tbl
  3.     -> GROUP BY last_name, first_name
  4.     -> HAVING repetitions > 1;
复制代码
  1. 以上查询语句将返回 person_tbl 表中重复的记录数。 一般情况下,查询重复的值,请执行以下操作:
  2. 确定哪一列包含的值可能会重复。
  3. 在列选择列表使用COUNT(*)列出的那些列。
  4. 在GROUP BY子句中列出的列。
  5. HAVING子句设置重复数大于1。
复制代码


过滤重复数据
  1. mysql> SELECT DISTINCT last_name, first_name
  2.     -> FROM person_tbl;
复制代码

使用 GROUP BY 来读取数据表中不重复的数据
  1. mysql> SELECT last_name, first_name
  2.     -> FROM person_tbl
  3.     -> GROUP BY (last_name, first_name);
复制代码

删除重复数据
  1. mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl  GROUP BY (last_name, first_name, sex);
  2. mysql> DROP TABLE person_tbl;
  3. mysql> ALTER TABLE tmp RENAME TO person_tbl;
复制代码
也可以使用数据表中添加 索引 和主键来操作删除重复数据
  1. mysql> ALTER IGNORE TABLE person_tbl
  2.     -> ADD PRIMARY KEY (last_name, first_name);
复制代码





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表