• mysql处理重复数据


    有些 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_tb2
    (
       first_name CHAR(20) NOT NULL,
       last_name CHAR(20) NOT NULL,
       sex CHAR(10),
       PRIMARY KEY (last_name, first_name)#一种设置数据的唯一性方法是添加一个UNIQUE索引,unique(last_name,first_name)
    );
    我们发现在表1种插入insert into person_tb1(last_name,firsr_name)values('alex','connor'),然后插入重复多次,发现都已经插入成功
    而在表二中插入
    insert into person_tb1(last_name,firsr_name)values('alex','connor'),同样插入第二次,就会报错,是因为设置了唯一性!
    可以使用
    insert into ignore person_tb1(last_name,firsr_name)values('alex','connor'),插入第二次,并不会报错
    NSERT IGNORE INTO与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。
    这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的!

    统计重复数据:select first_name,last_name,count(*) as repetitions from person_t1,
    group by frist_name,last_name,
    having repetitions>1
    过滤重复数据:select distinct first_name from person_t1



  • 相关阅读:
    Anroid自定义RatingBar,显示半个(小数个)的stepSize时,变为整数个的问题
    浅谈Java对象回收的三种方式
    今天为火狐社区做了点小小的共享,开心一下~~
    解决mac的日历问题:服务器响应一个错误
    android.content.res.Resources$NotFoundException:String resource ID #ffffffff
    Android 读写文件的第一种方式(文件方式)
    ListView的性能提升
    C++中的回调函数实现,sink方式
    技巧:Activity收集器
    技巧:知晓当前在哪个Activity
  • 原文地址:https://www.cnblogs.com/ConnorShip/p/9914905.html
Copyright © 2020-2023  润新知