很全面的MySQL处理重复数据代码
有些MySQL数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。
本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据。
一、防止表中出现重复数据
你可以在MySQL数据表中设置指定的字段为PRIMARYKEY(主键)或者UNIQUE(唯一)索引来保证数据的唯一性。
让我们尝试一个实例:下表中无索引及主键,所以该表允许出现多条重复记录。
CREATETABLEperson_tbl ( first_nameCHAR(20), last_nameCHAR(20), sexCHAR(10) );
如果你想设置表中字段first_name,last_name数据不能重复,你可以设置双主键模式来设置数据的唯一性,如果你设置了双主键,那么那个键的默认值不能为NULL,可设置为NOTNULL。如下所示:
CREATETABLEperson_tbl ( first_nameCHAR(20)NOTNULL, last_nameCHAR(20)NOTNULL, sexCHAR(10), PRIMARYKEY(last_name,first_name) );
如果我们设置了唯一索引,那么在插入重复数据时,SQL语句将无法执行成功,并抛出错。
INSERTIGNOREINTO与INSERTINTO的区别就是INSERTIGNORE会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
以下实例使用了INSERTIGNOREINTO,执行后不会出错,也不会向数据表中插入重复数据:
mysql>INSERTIGNOREINTOperson_tbl(last_name,first_name) ->VALUES('Jay','Thomas'); QueryOK,1rowaffected(0.00sec) mysql>INSERTIGNOREINTOperson_tbl(last_name,first_name) ->VALUES('Jay','Thomas'); QueryOK,0rowsaffected(0.00sec)
INSERTIGNOREINTO当插入数据时,在设置了记录的唯一性后,如果插入重复数据,将不返回错误,只以警告形式返回。而REPLACEINTOinto如果存在primary或unique相同的记录,则先删除掉。再插入新记录。
另一种设置数据的唯一性方法是添加一个UNIQUE索引,如下所示:
CREATETABLEperson_tbl ( first_nameCHAR(20)NOTNULL, last_nameCHAR(20)NOTNULL, sexCHAR(10) UNIQUE(last_name,first_name) );
二、统计重复数据
以下我们将统计表中first_name和last_name的重复记录数:
mysql>SELECTCOUNT(*)asrepetitions,last_name,first_name ->FROMperson_tbl ->GROUPBYlast_name,first_name ->HAVINGrepetitions>1;
以上查询语句将返回person_tbl表中重复的记录数。一般情况下,查询重复的值,请执行以下操作:
1、确定哪一列包含的值可能会重复。
2、在列选择列表使用COUNT(*)列出的那些列。
3、在GROUPBY子句中列出的列。
4、HAVING子句设置重复数大于1。
三、过滤重复数据
如果你需要读取不重复的数据可以在SELECT语句中使用DISTINCT关键字来过滤重复数据。
mysql>SELECTDISTINCTlast_name,first_name ->FROMperson_tbl ->ORDERBYlast_name;
你也可以使用GROUPBY来读取数据表中不重复的数据:
mysql>SELECTlast_name,first_name ->FROMperson_tbl ->GROUPBY(last_name,first_name);
四、删除重复数据
如果你想删除数据表中的重复数据,你可以使用以下的SQL语句:
mysql>CREATETABLEtmpSELECTlast_name,first_name,sex ->FROMperson_tbl; ->GROUPBY(last_name,first_name); mysql>DROPTABLEperson_tbl; mysql>ALTERTABLEtmpRENAMETOperson_tbl;
当然你也可以在数据表中添加INDEX(索引)和PRIMAYKEY(主键)这种简单的方法来删除表中的重复记录。方法如下:
mysql>ALTERIGNORETABLEperson_tbl ->ADDPRIMARYKEY(last_name,first_name);
以上就是关于MySQL处理重复数据的全部内容,希望对大家的学习有所帮助。