MySQL在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
计算机涂磊 发布于:2023-11-30 15:33 人工三王青锐 发布于:2023-11-30 11:44 人工智能三班啊坤 发布于:2023-11-30 11:42 MySQL Select查询 发布于:2023-11-28 15:31 mysql database 发布于:2023-11-27 23:54 创建 学生表 发布于:2023-11-27 14:43 不考虑不不 发布于:2023-11-25 10:26 为了谁,你到底为了谁! 发布于:2023-11-24 14:23 my sql jiankojjieshieao 发布于:2023-11-24 13:54 数据库期中 发布于:2023-11-24 16:56 为了谁,为了谁! 发布于:2023-11-24 12:56 为什么不支持 发布于:2023-11-23 13:47 徐国峰的第一次代码作业 发布于:2023-11-22 11:57 西瓜创客笔试 发布于:2023-11-21 17:38 PetStore数据库 发布于:2023-11-14 16:43 课程实验代码 发布于:2023-11-13 21:31 mysql编程,数据库编程 发布于:2023-11-13 16:03 测试下jsrun.net上能否在线保存mysql文件 发布于:2023-11-13 15:53 创建数据库 创建表student,分数表score 显示 发布于:2023-11-12 18:01 mysql经典试题 发布于:2023-11-12 09:49 学习中使用 发布于:2023-11-10 17:30 MySQL学习用数据库 发布于:2023-11-10 17:24 create table goods ( 商品编号 varchar(20), 商品名称 varchar(20), 生产日期 date, 生产厂家 varchar(10) ); insert into goods values ('201601','酸奶','2016-05-26','蒙牛'), ('201602','薯片','2016-07-29','乐事'); select * from goods; alter table goods add 价格 decimal(9,2); alter table goods add 产品数量 int; alter table goods add 产品简介 text; 发布于:2023-11-10 15:57 SQL正则表达式测试 发布于:2023-11-08 23:47 银行sql 发布于:2023-11-11 22:54 用户信息表 发布于:2023-11-07 14:21 mysql代码敲打 发布于:2023-11-03 19:12 学习Mysql基本操作 发布于:2023-11-03 15:39 wode yidige 发布于:2023-11-01 20:23 一个测试程序 发布于:2023-11-02 10:31 Create database course and student 发布于:2023-11-01 09:21 mysql备份 发布于:2023-10-31 17:41 代码运行器 发布于:2023-10-31 17:04 行转列测试 发布于:2023-10-31 11:02 创建两个表 发布于:2023-10-30 11:39 根据报表公式(公式含有行间四则运算,存在行间嵌套运算),循环计算各行结果值。 发布于:2023-10-28 00:07 #表t_view是用户每日访问记录表,表ord是用户订单表 ##问题一:请分别计算“每日访问用户数”;“每日支付完成用户数”,最后结果输出到一张表 ##问题二:计算访问用户下单转化,即每天访问的用户中有多少下单的用户,输出:日期、当天访问用户、当天访问下单用户数 ##问题三:计算2023-01-01的的下单新用户中有多少复购的用户,复购的定义为有支付完成第二单 发布于:2023-10-27 17:32 哈啰笔试题目 发布于:2023-10-27 11:31 USE db_DATABASE; CREATE TABLE tb_student( id mediumint not null auto_increment, name varchar(20), sex enum('男','女'), age tinyint, address varchar(255), primary key(id) )engine=innodb default charset=utf8; INSERT INTO tb_student VALUES (null,'张三','男',18,'广东省广州市'); INSERT INTO tb_student VALUES (null,'李四','男',19,'北京市朝阳区'); INSERT INTO tb_student VALUES (null,'张琳','女',20,'福建省厦门市'); INSERT INTO tb_student VALUES (null,'张晓露','女',22,'湖北省武汉市'); 发布于:2023-10-27 11:20 用户数据笔试数据答案测试 发布于:2023-10-27 11:15 un db pour TD3 发布于:2023-10-26 18:47 数据库Employees 发布于:2023-10-26 14:47 用户数据笔试数据 发布于:2023-10-26 11:21 笔试内容一 发布于:2023-10-26 10:59 创建教务管理系统表,课本P67至P71 发布于:2023-10-31 20:13 MySQL用户管理 发布于:2023-10-24 17:20 web代码 发布于:2023-10-23 16:29 MySQL代码 发布于:2023-10-23 16:26 Mysql经典50题 发布于:2023-10-24 16:15 学习用法初学 发布于:2023-10-23 10:09 [更多]
显示目录

处理重复数据



处理重复数据

有些 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如果存在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)
);

查询重复记录

select user_name,count(*) as count from user_table group by user_name having count>1;

select * from people 
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

统计重复数据

以下我们将统计表中 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
    -> ORDER BY last_name;

你也可以使用 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);
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);
由JSRUN为你提供的MySQL在线运行、在线编译工具
        JSRUN提供的MySQL 在线运行,MySQL 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。