MySQL在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,更高效的运行,点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
吴淼淼的第二个代码 发布于:2022-09-29 11:39 THE WORLD 发布于:2022-09-29 11:16 上课题目结果 发布于:2022-09-29 09:49 汪雯静23实训周四 发布于:2022-09-29 09:03 铜仁的一个简单的代码 发布于:2022-09-28 17:54 吴淼淼的第一个代码 发布于:2022-09-27 11:37 第一个代码 发布于:2022-09-27 11:35 PPT,19到28页 发布于:2022-09-27 11:31 hhhh 上课内容 发布于:2022-09-29 10:23 代码的测试方法 发布于:2022-09-26 09:22 wode daima 发布于:2022-09-26 09:22 wode daima 发布于:2022-09-29 08:59 电子杂志订阅表 发布于:2022-09-25 00:27 9.20 大数据与基础 发布于:2022-09-20 11:35 求出每3个或2个相加的和等于10 发布于:2022-09-20 10:50 learn note 发布于:2022-09-17 20:29 创建代码 其中 id 唯一,自增,不为空 发布于:2022-09-07 21:19 MySQL Test1 发布于:2022-09-07 15:47 我的代码我 发布于:2022-08-25 17:00 创建教学管理数据库,包含专业、班级、学生、课程、教师和成绩共6个表 发布于:2022-08-24 10:44 P12 第三章1.1 发布于:2022-08-22 21:41 employee表格 发布于:2022-08-16 10:05 小白输入列表 发布于:2022-08-15 10:44 02.正则表达式搜索 发布于:2022-08-11 10:22 常用SQL 发布于:2022-08-08 15:42 学习普通的数据库使用方法 发布于:2022-07-29 14:50 student course enrolledIn 发布于:2022-07-28 14:03 mysql study 发布于:2022-07-21 22:24 命名查询结果 发布于:2022-07-16 13:39 MYSQL-TCH 发布于:2022-07-14 20:09 【学习自用】mysql创建数据库、数据表,增删改查 发布于:2022-07-14 14:17 Mysql 月数据量 发布于:2022-07-15 10:34 用户信息表 发布于:2022-07-11 17:46 第一套 T 3.2 发布于:2022-07-08 08:49 select limit实践 发布于:2022-07-07 14:49 我的小练习【distinc group by】 发布于:2022-07-05 11:22 employess表测试 发布于:2022-07-03 18:02 departments表测试。 发布于:2022-07-03 16:52 测试customer表。 发布于:2022-07-03 14:52 select中字段对象为子查询并对其进行聚合的样例 发布于:2022-06-29 10:57 Unique Test One 发布于:2022-06-24 14:30 输出所有大于80分的学生 发布于:2022-06-22 17:50 当当网站图书 发布于:2022-06-18 15:52 实验五成功的表 发布于:2022-06-23 09:42 实验四的表 发布于:2022-06-16 09:55 MysQl 基本语法 发布于:2022-06-15 21:56 MYSQL 课业 发布于:2022-06-15 20:48 mysql上机7 发布于:2022-06-13 23:32 程机械租赁系统 发布于:2022-06-12 23:45 测试学生表 发布于:2022-06-12 21:52 [更多]
显示目录

处理重复数据



处理重复数据

有些 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操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

  • 00:23
注册登录后可减少验证码的弹出,点击前往 注册 | 登录

皮肤:

运行模式:

嵌入代码 iframe嵌入:


服务器已安装大部分常用的第依赖库,但仍可能存在一些未被安装的库, 可以通过本窗口立即安装所需依赖库。


请输入依赖库的名称:

请选择语言: