MySQL教程 MySQL教程MySQL 连接MySQL 查看数据库MySQL 创建数据库MySQL 修改数据库MySQL 删除数据库MySQL 选择数据库MySQL 数据类型MySQL存储引擎MySQL 数据表的增删改查MySQL 表数据增删改查操作MySQL 条件子句MySQL 清空表记录MySQL 模糊查询MySQL 处理重复数据MySQL 别名MySQL 限制查询结果数量Mysql 查询结果排序MySQL 范围查询MySQL 空值查询MySQL 查询结果合拼MySQL 分组MySQL 筛选分组MySQL 表连接MySQL NULL值处理MySQL 子查询MySQL 正则表达式MySQL 视图MySQL 索引MySQL 事务MySQL 数据库备份(导出)/还原(导入)MySQL安装 MySQL Windows版下载教程MySQL windows系统安装教程MySQL windows系统简单的安装教程MySQL Linux系统安装教程MySQL Linux系统下载教程MySQL Linux系统简单的安装教程配置MySQL环境变量

MySQL 处理重复数据

在MySQL数据库表中数据有时候会有重复数据那怎么呢?本文章讲解如何防止重复出现,查询重复数据和过滤重复数据及删除重复数据。

防止重复数据出现

phpmyadmin图形工具防止重复数据

防止表出现重复数据,设置主键或者唯一索引

360截图20230922103914361.jpg

MySQL语句防止重复数据

1.设置字段为主键

将d表的id设置为主键,MySQL的表主键值是能重复的,这样就可以防止出现重复数据

ALTER TABLE `d`
ADD PRIMARY KEY (`id`);

2.设置字段为唯一索引

唯一索引的值是不能重复的

ALTER TABLE `d`
ADD UNIQUE INDEX `id` (`id`) ;

过滤重复数据

在MySQL数据库中,DISTINCT关键字用于从结果集中选择唯一不同的值。它用于查询指定列中的唯一记录,以消除结果集中的重复行。

使用 DISTINCT 关键字时需要注意以下几点:

如果 DISTINCT 关键字后有多个字段,则会对多个字段进行组合去重,也就是说,只有多个字段组合起来完全是一样的情况下才会被去重。

phpmyadmin过滤重复数据

过滤重复数据在选择数据库和表后可在sql选项卡输入语句后执行,将不回出现有id重复的数据

360截图20230911145438816.jpg

MySQL语句过滤重复数据

一、DISTINCT语句语法

DISTINCT关键字可以与SELECT语句一起使用,用于选择指定列中的唯一值。语法如下:

SELECT {DISTINCT <列名1>,...<列名n>}[<列名1>,...<列名n>] FROM <表名>;

语法说明:[ ]中的内容是可选的,<>是中文解释。

二、DISTINCT语句案例

下面是一些使用DISTINCT语句的案例。test 数据库中 student 表的表结构和数据,列分别是学生id、学生姓名、学生年龄、学生学号。

+----+----------+------+-------+
| id | name     | age  | stuno |
+----+----------+------+-------+
|  1 | zhangsan |   18 |    23 |
|  2 | lisi     |   19 |    24 |
|  3 | wangwu   |   18 |    25 |
|  4 | zhaoliu  |   18 |    26 |
|  5 | zhangsan |   18 |    27 |
|  6 | wangwu   |   20 |    28 |
+----+----------+------+-------+

三、案例:查询唯一年龄

对 student 表的 age 字段进行去重

mysql> SELECT DISTINCT age FROM student;
+------+
| age  |
+------+
|   18 |
|   19 |
|   20 |
+------+
3 rows in set (0.00 sec)

查询重复数据

phpmyadmin查询重复数据

查询表中product_category重复的数据

360截图20230922111413186.jpg

M有SQL语句查询重复数据

查询语句使用了COUNT函数GROUP BY语句HAVING语句对重复数据进行查询,意思是priduct_category字段数据重复大于1的显示出来

SELECT product_category, COUNT(*) as order_count
FROM orders
GROUP BY product_category
HAVING order_count > 1;

删除重复数据

通过GRUOP BY语句去除重复数据使用ANY_VALUE函数显示其他字段,再通过查询数据新建表,删除原来的表,把新建的表名改为原来的表名。

mysql>CREATE TABLE tmp SELECT ANY_VALUE(order_id),ANY_VALUE(customer_id),product_category,ANY_VALUE(total_amount)
    -> from orders GROUP BY product_category;
mysql>DROP TABLE orders;
mysql>ALTER TABLE tmp RENAME TO orders;
注意如果是mysql 5.7.5版本,默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。由于开启了ONLY_FULL_GROUP_BY的设置,如果select 的字段不在 group by 中,并且select 的字段未使用聚合函数(SUM,AVG,MAX,MIN等)的话,那么这条sql查询是被mysql认为非法的,会报错误。可以用ANY_VALUE函数解决。