周大胖子 发表于 2018-7-28 00:10:15

MYSQL 重复数据的处理

1.防止表中出现重复数据:【可以在MYSQL 数据表中设置新字段为 PRMARY KEY 主键 或者UNQUE 索引来确保数据的唯一性。】CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);备注:如果设置了first_name,last_name不能重复,可以使用双主键来设置数据的唯一性

如果设置了唯一索引,那么数据重复时 sql 语句无法执行成功,并跑出错
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)另一种设置数据唯一性的方法就是添加一个uniqe索行 如上!

统计重复数据
mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;以上查询语句将返回 person_tbl 表中重复的记录数。 一般情况下,查询重复的值,请执行以下操作:

确定哪一列包含的值可能会重复。
在列选择列表使用COUNT(*)列出的那些列。
在GROUP BY子句中列出的列。
HAVING子句设置重复数大于1。


过滤重复数据
mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

使用 GROUP BY 来读取数据表中不重复的数据
mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

删除重复数据
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tblGROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;
也可以使用数据表中添加 索引 和主键来操作删除重复数据
mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);





页: [1]
查看完整版本: MYSQL 重复数据的处理