MySQL重复与不重复问题
1.查询某个字段不重复的记录
当某个字段有重复的数据,而其他字段数据不一样时,需要查询这些不重复的记录,可以使用distinct关键字配合group by进行查询。
1)先看所有的数据

2)根据name查询不重复的记录
基本语法
select *, count(distinct name) from table group by name
查询结果

3)注意事项
如果包含了order by,那么必须放到group by后面;如果包含了limit,那么必须放到group by后面。
2. 解决数据重复插入问题
2.1环境准备
先建一个表并插入一条数据
create table user(
id int not null primary key,
name varchar(50),
age int unique
);
insert into user(id,name,age) values(1,"张三",13);
2.2 insert ignore基本用法
当插入的数据已经存在时,则忽略当前新数据。即语句可以正常执行,但不会报错,数据也不会更新。会出现的问题是插入若不是因为重复数据报错,而是因为其他原因报错的,也同样被忽略了,无法查看错误信息。
1)再使用相同的id插入值,会报错“Duplicate entry '1' for key 'PRIMARY'”
insert into user(id,name,age) values(1,"李四",22);
2)使用insert ignore进行插入,不报错,但是数据没有更新
insert ignore user(id,name,age) values(1,"李四",22);
由此可以看出,insert ignore可以解决插入重复数据的问题。当数据存在时,就不会插入。关键点是primary key约束存在,原因是insert在插入时会检查主键。
2.3 replace into基本用法
在插入数据时进行数据的替换,前提是表存在primary key或unique约束。原理是先根据主键判断数据是否存在,当数据存在时,会删除对应的数据,把当前的数据再插入,若不存在时则查询唯一约束是否存在,若不存在则直接插入新数据,若存在就会删除对应的数据,把当前的数据再插入。
replace into user(id,name,age) values(1,"李四",22);
此语句执行后,数据已发生了变化,如name由原来的"张三"变成了现在的"李四"。unique的用法和primary key类似。
2.4 insert ignore、replace into与insert into的区别
| 关键字 | 说明 |
| insert into | 根据主键检查来插入,插入重复的数据会报错 |
| insert ignore | 当数据存在时忽略新数据,不存在时插入(此时相当于insert into) |
| replace into | 当数据存在时删除旧数据,插入最新数据,不存在时插入(此时相当于insert into) |
2.5 on duplicate key update
当primary或者unique重复时,则执行update语句,不重复时则直接执行insert语句。前提是表存在primary key或unique约束。
insert into user(id,name,age) values(1,"李四",22) on duplicate key update name = '王五',age=30
上面的语句在执行时,id为1的用户信息已存在,则不会插入新数据,而是根据主键把name和age进行更新,执行后数据如下图,数据已经根据主键修改了:

unique的用法和primary key类似。
MySQL重复与不重复问题的更多相关文章
- mysql查询表里的重复数据方法:
INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test ...
- mysql去重, 把url重复且区为空的中去掉、统计重复数据、、结果集去重合并成一行
delete from 表名 where id not in (select d.id from (SELECT id FROM 表名 GROUP BY c1,c2,c3,c4)as d) #去重复, ...
- MySQL查询及删除重复记录的方法
查询及删除重复记录的方法(一)1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select p ...
- MySQL 删除数据库中重复数据方法
1. 查询需要删除的记录,会保留一条记录. select a.id,a.subject,a.RECEIVER from test1 a left join (select c.subject,c.RE ...
- mysql查询出所有重复的记录
假如我们有如下一张数据表(很简单,只是举例而已),表名为student.现在我们要取出其中重复记录.重复是以name相同为判定标准. ID name phone age 1 张三 10086 15 2 ...
- LINQ找出重复和不重复的元素及linq OrderBy 方法 两个字段同时排序有关问题
//重复元素:3,4,5 //不重复元素:1,8,9 , , , , , , , , , , }; //不重复元素 var unique = arr.GroupBy(i => i) .Where ...
- JAVA取数两个数组交集,考虑重复和不重复元素
1.考虑不重复元素,重复元素不添加 import java.awt.List; import java.util.ArrayList; import java.util.TreeSet; public ...
- 大数据位图法(无重复排序,重复排序,去重复排序,数据压缩)之Java实现
1,位图法介绍 位图的基本概念是用一个位(bit)来标记某个数据的存放状态,由于采用了位为单位来存放数据,所以节省了大量的空间.举个具体的例子,在Java中一般一个int数字要占用32位,如果能用一位 ...
- SQL中删除重复的行(重复数据),只保留一行 转
方法一:使用在T-SQL的编程中 分配一个列号码,以COL1,COL2组合来分区排序,删除DATABASE重复的行(重复数据),只保留一行 // COL1,COL2是数据库DATABASE的栏位 de ...
- php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组
版权声明:本文为博主原创文章,未经博主允许不得转载. 最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二 ...
随机推荐
- 【乐观锁实现】StampedLock 的乐观读机制
StampedLock 的乐观读机制主要解决了读多写少场景下,传统读写锁(如 ReentrantReadWriteLock)可能存在的写线程饥饿或性能瓶颈问题.它通过一种"乐观"的 ...
- 工作中常见的OOM?你了解JVM调优吗?
工作中常见的6种OOM问题 堆内存OOM 堆内存OOM是最常见的OOM了. 出现堆内存OOM问题的异常信息如下: java.lang.OutOfMemoryError: Java heap space ...
- SciTech-Physics-Particle-Atom:{Electron + Kernel{Proton+Neutron}} + Bands(Energy) + Movement{自由电子+空穴} + 导电 + Energy Transition: 电致发光
SciTech-Physics-Particle Atom 组成+结构: Nucleus: Proton Neutron Bands(Energy) Electron: Movement with P ...
- gurobipy: Gurobi Optimizer is a mathematical optimization software library for solving mixed-integer linear and quadratic optimization problems
Project description The Gurobi Optimizer is a mathematical optimization software library for solving ...
- 手把手搭建 Astro + Github Pages + Github Actions
项目源地址:saicaca fuwari 我实现的效果:https://bxgldh.github.io/ 挑模板挑了很久,个人认为原博主的这个模板非常好看O(∩_∩)O. 但是由于我是小白,在上手初 ...
- win11专业版系统无法连接wifi网络的问题
有一位雨林木风系统的用户,不知道咋地好好的把电脑升级win11 23h2官方正式版,等系统安装好后,发现电脑居然不能连接wifi网络了,也不知道发生了什么事,而且重装一次了也还是如此,那要如何是好呢? ...
- 自定义Inspector面板
using UnityEditor; using UnityEngine; public enum MyType { Dev, Master } public class TestCode : Mon ...
- VUE项目开发报错:Error in render: "TypeError: Cannot read property 'country' of undefined"
VUE项目开发中遇到的问题记录一下 如题,vue页面开发中控制台报如上错误,但是页面展示是有数据的,展示正常,具体错误如下图 对页面展示没有影响,但是控制台一直报这个错,看着就不舒服,于是去找原因 首 ...
- SpringBoot中使用TOTP实现MFA(多因素认证)
一.MFA简介 定义:多因素认证(MFA)要求用户在登录时提供至少两种不同类别的身份验证因子,以提升账户安全性 核心目标:解决单一密码认证的脆弱性(如暴力破解.钓鱼攻击),将账户被盗风险降低 ...
- 开发小技巧:超长字数显示省略号CSS配置
1 .card-title { 2 /* font-size: 15px; */ 3 font-size: 0.82vw; 4 font-weight: bold; 5 6 /* 一旦使用渐变色,文字 ...