mysql重复记录大于十的数据库_面试官:在使用mysql数据库时,遇到重复数据怎么处理?...

前言

前段时间,很多人问我能不能写一些数据库的文章,正好自己在测试mysql数据库性能的时候,出现了一个问题,也就是出现了很多重复的数据,想起来自己long long ago写过一篇类似的,仅此就拿来总结了一下。如果你在使用mysql的时候也遇到了这个问题,希望能对你有所帮助。

注意:

这篇文章不是数据库系列的正式文章,有关mysql、MongoDB、redis、oracle等数据库系列的文章正在整理中。

其实解决能否插入重复数据的问题,一般情况下是有两个思路,就像治水一样,第一个就是从源头,第二个就是在水流经的路上。我们带着这两种思路继续往下看:

问题

在我们的mysql数据库中,经常会出现一些重复的数据,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。 我们如何去处理呢?

方法一:防止出现重复数据

也就是说我们再设计表的时候,就应该对这些数据设置一个UNIQUE 索引,在插入的时候就可以保证其唯一性,也就不存在有重复的数据了。当然你也可以直接设置为PRIMARY KEY(主键)。效果也是一样的。

我们看一个案例:下表中无索引及主键,所以该表允许出现多条重复记录。

CREATE TABLE student

(

first_name CHAR(20),

last_name CHAR(20),

sex CHAR(10)

);

目前first_name,last_name是可以重复的,如果不想重复这里有两个解决办法:

1、设置双主键模式

CREATE TABLE student

(

first_name CHAR(20) NOT NULL,

last_name CHAR(20) NOT NULL,

sex CHAR(10),

PRIMARY KEY (last_name, first_name)

);

现在就无法插入重复数据了。

2、添加unique索引

CREATE TABLE student

(

first_name CHAR(20) NOT NULL,

last_name CHAR(20) NOT NULL,

sex CHAR(10)

UNIQUE (last_name, first_name)

);

这两种看起来形式好像有一点区别,但是能起到相同的作用。此时我们可以插入两条重复的数据,会发现报错。

当然我们还可以在数据库中去验证一下:

SELECT COUNT(*) as repetitions, last_name, first_name

FROM student

GROUP BY last_name, first_name

HAVING repetitions > 1;

在这里我们统计的是 first_name 和 last_name的重复记录数,上面已经用两种方法设置了,这里肯定就是0了。

方法二:在插入时指定能否插入重复数据

在这里我们使用的是Insert ignore into 与Insert into指令。

(1)Insert ignore into会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

(2)Insert into则直接相反,会直接插入数据,不管数据库里面是否含有重复数据。

我们还是举例说明:

insert ignore into student (last_name, first_name) values ( '张三', '李四');

//结果

Query OK, 1 rows affected (0.00 sec)

insert ignore into student (last_name, first_name) values ( '张三', '李四');

//结果

Query OK, 0 rows affected (0.00 sec)

现在我们看出来了吧,也就是说在执行第一条插入操作的时候,看到数据库没有,则直接插入一条新纪录,因此一行记录受到影响,但是在第二次插入的时候,数据库已经有一条一样的了,因此便不会插入了,0行受到影响。

当然了还有一个指令也可以完成类似于insert ignore into相似的功能,那就是replace into。他表示的是如果存在primary 或 unique相同的记录,则先删除掉。再插入新记录。

方法三:过滤重复数据

如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

SELECT DISTINCT last_name, first_name

FROM student

ORDER BY last_name;

你也可以使用 GROUP BY 来读取数据表中不重复的数据:

SELECT last_name, first_name

FROM student

GROUP BY (last_name, first_name);

方法四:删除重复数据

这种情况其实就相当于,在水的终点处去解决。看下面sql语句:

//根据student创建一个临时表,并使用group by过滤了重复数据

CREATE TABLE tmp SELECT last_name, first_name, sex

FROM student;

GROUP BY (last_name, first_name);

//删除原student表

DROP TABLE student;

//给这个临时表重新命名

ALTER TABLE tmp RENAME TO stu;

当然你也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:

ALTER IGNORE TABLE student

ADD PRIMARY KEY (last_name, first_name);

OK,解决办法这么多,相信能解决你的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程组的概念

一,线程组和线程的结构:树形结构 每个Thread必然存在于一个ThreadGroup中,Thread不能独立于ThreadGroup存在。 执行main()方法线程的名字是main 如果在new Thread时没有显式指定,那么默认将父线程(当前执行new Threa…

mysql中ak替换键_数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束...

数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束数据库:唯一性约束所谓唯一性约束(unique constraint)不过是数据表内替代键的另一个名称而已。替代键(alternate key)可以是数据表内不作为主键的其他任何列,只要该键对该数据表唯一即可…

Oracle自定义类型

Oracle自定义类型可以通过type/create type来声明或者创建 一,四种创建方式 1.1,使用create type创建object类型 create or replace type obj_type as object(id number,name varchar2(50 byte),birthday date); 1.2,使用create type创建…

Oracle/mysql查询语句的执行过程

执行顺序 from on join/pivot/unpivot(mysql没有pivot和unpivot) where group by having select distinct order by limit&#xff08;oralce没有&#xff09; 书写顺序 select distinct <select_list> from <left_table> <join_type>join <righ…

mysql定时sql脚本_定时执行的SQL脚本

因为要同步一个表&#xff0c;所以每天要同步一次数据&#xff0c;但是对SQL不是精通的我&#xff0c;为了测试写了一段代码来测试定时功能创建一个存储过程&#xff0c;是用来插数据的&#xff0c;没有输出和输出参数create or replace procedure temp_pro asbegininsert into…

mysql xml语句_Mysql语句

xml文件转义字符处理(1)(2)直接写转义后的字符1、mysql里批量修改表内某个字段内的部分数据UPDATE inventory_stockSET batchno REPLACE(batchno,-20-201901,-50-2019)2、ON DUPLICATE KEY UPDATE根据主键判断是新增还是修改(也可以有两个或多个主键)INSERT INTO TABLE (a,c) …

destoon网站mysql分表_destoon : 常用数据库操作

destoon在初始化系统后系统会自动连接数据库&#xff0c;并将数据库操作对象保存在$db。对于数据库操作方法参考include/db_mysql.class.php函数原型&#xff0c;我来写几个常用数据库操作。1、读取单条信息$S $db->get_one("SELECT * FROM {$DT_PRE}table WHERE xxxy…

delphi7 mysql控件_Delphi7连接MySql数据库-DBGrid控件显示数据

一个简单的Delphi7小程序&#xff0c;使用MySql数据库做简单查询&#xff0c;用DBGrid控件显示结果&#xff0c;实现过程如下&#xff1a;(1)在MySql中新建demouser表&#xff0c;插入记录用于测试。(2)在Delphi7中新建项目。(3)在From中添加组件。组件Panel&#xff1a;pnl1组…

for循环false 终止 python_python3.5.1给用户3次无效的尝试,然后终止pgm(Simple FOR循环)...

我需要帮助(新生-2周)。我想得到这段代码可能的最微小的变化&#xff0c;允许用户3次在程序中输入错误的值。输入错误值3次后&#xff0c;程序应终止。唯一的要求是代码必须包含FOR循环。我不知道它是需要一个FOR循环还是3个FOR循环(每次转换一个)。我尝试了很多种方案&#xf…

mysql何时会走索引

访问类型&#xff0c;这里只列出最常见的6种类型 all,index,range,ref,eq_ref&#xff0c;const mysql中explain的type的解释_dennis211的博客-CSDN博客_explain type 使用不同的运算符时访问类型不一样&#xff1a; !、not in、<>、>、<、in(多个值)、or、bet…

mysql数据库唯一性_在MySQL数据库中添加唯一性约束,范围可能吗?

我有一个使用MySQL的Rails应用程序。我在两个模型之间有一个has_many :through关联&#xff0c;如下所述&#xff1a;class Category < ActiveRecord::Basehas_many :category_pairingshas_many :dishes, through: :category_pairings, :inverse_of > :categoriesendclas…

filtic函数 matlab_matlab filtic 函数应用 filter 解差分方程 dft 函数

matlab filtic 函数应用 filter 解差分方程 dft 函数一、 解差分方程说明都在代码注释里面了%这里要利用filtic函数 为滤波器的直接II型实现选择初始条件%求解查分方程 y(n) - 0.4y(n-1) - 0.45y(n-2) 0.45x(n) 0.4x(n-1) - x(n-2)%y(-1) 0 y(-2) 1 x(-1) 1 x(-2) 2%x(n)…

rabbitmq进阶一

上一篇文章有讲到rabbitmq的安装、web管理端和springboot简单集成rabbitmq 本文重点介绍rabbitmq相关api的使用 按照官网常用的五种模式的顺序&#xff1a;HelloWorld、Work queues、Publish/Subscribe、Routing、Topics 模式简单介绍 HelloWorld 一个生产者&#xff0c;一…

mysql 相关搜索_MySQL单词搜索相关度排名

一个单词搜索的相关度排名,这个例子演示了一个单词搜索的相关度排名计算。mysql> CREATE TABLE articles (-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,-> title VARCHAR(200),-> body TEXT,-> FULLTEXT (title,body)-> ) ENGINEInnoDB;Query O…

IDEA使用总结

idea中使用tomcat IntelliJ IDEA配置Tomcat&#xff08;完整版图文教程&#xff09;_猿Bug的博客-CSDN博客_intellij tomcat配置 用上面的方式发现缺少文件&#xff0c;在edit configuration页面选择before lanuch前选择Run maven goal package

mysql一直copying to tmp table_mysql提示Copying to tmp table on disk

网站运行的慢了&#xff0c;查找原因是Copying to tmp table on disk那怎么解决这个问题呢解决一例最近常常碰到网站慢的情况&#xff0c;登陆到后台&#xff0c;查询一下 /opt/mysql/bin/mysqladmin processlist;发现一个查询状态为&#xff1a; Copying to tmp table 而且此查…

idea cloud bootstrap是啥_application.yml与bootstrap.yml的区别

Spring Boot 默认支持 properties(.properties) 和 YAML(.yml .yaml ) 两种格式的配置文件&#xff0c;yml 和 properties 文件都属于配置文件&#xff0c;功能一样。Spring Cloud 构建于 Spring Boot 之上&#xff0c;在 Spring Boot 中有两种上下文&#xff0c;一种是 bootst…

python读取日期_从文件中读取日期和数据(Python)

我想从文件中读取时间字符串和数据&#xff0c;但是当我使用loadtxt时&#xff0c;我不能同时读取字符串和数字&#xff0c;因为字符串不是浮点型的。所以我尝试使用genfromtxt并使用delimiter[][][]作为我所拥有的列&#xff0c;但是字符串的读起来像nan。我希望像时间数组(da…

一个小白如何创建MYSQL数据表_MySQL小白扫盲(二)--建表、添加、查询

1.SELECT子句字句名称          使用目的select           确定结果集中应该包含哪些列from           指明所要提取数据的表&#xff0c;以及这些表示如何连接的where           过滤掉不需要的数据group by         用于…

元数据解决分表不可 mysql_MySQL InnoDB技术内幕:内存管理、事务和锁

前面有多篇文章介绍过MySQL InnoDB的相关知识&#xff0c;今天我们要更深入一些&#xff0c;看看它们的内部原理和机制是如何实现的。一、内存管理我们知道&#xff0c;MySQl是一个存储系统&#xff0c;数据最后都写在磁盘上。我们以前也提到过&#xff0c;磁盘的速度特别是大容…