zoukankan      html  css  js  c++  java
  • 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



  • 相关阅读:
    uva 532
    uva 10557
    uva 705
    uva 784
    uva 657
    uva 572
    uva 10562
    usa物价统计
    2019/6/30,道歉书
    名词收集
  • 原文地址:https://www.cnblogs.com/ConnorShip/p/9914905.html
Copyright © 2011-2022 走看看