24处理重复数据
Posted stephanie-boke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了24处理重复数据相关的知识,希望对你有一定的参考价值。
处理重复数据
1、防止表中出现重复数据
你可以在 mysql 数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。
1.1、 使用 primary key 确保数据的唯一性,数据不能为null
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)
);
insert into person_tbl values (‘zhang‘,‘san‘,‘男‘);
insert into person_tbl values (‘zhang‘,‘san‘,‘男‘);
1062 - Duplicate entry ‘san-zhang‘ for key ‘PRIMARY‘
1.2、 使用 unique 来确保数据的唯一性,数据可以为null
CREATE TABLE person_tbl
(
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10),
UNIQUE (last_name, first_name)
);
insert into person_tbl values (‘zhang‘,‘san‘,‘男‘);
insert into person_tbl values (‘zhang‘,null,‘男‘);
1.3、 insert ignore into 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。
insert ignore into person_tbl (last_name, first_name) values (‘Jay‘, ‘Thomas‘);
insert ignore into person_tbl (last_name, first_name) values (‘Jay‘, ‘Thomas‘);
mysql> select * from person_tbl;
+------------+-----------+------+
| first_name | last_name | sex |
+------------+-----------+------+
| zhang | san | 男 |
| zhang | NULL | 男 |
| Thomas | Jay | NULL |
+------------+-----------+------+
3 rows in set
1.4、 replace into 如果存在 primary 或 unique 相同的记录,则先删除掉。再插入新记录。
replace into person_tbl (last_name, first_name) values (‘Jay‘, ‘Thomas‘);
mysql> select * from person_tbl;
+------------+-----------+------+
| first_name | last_name | sex |
+------------+-----------+------+
| zhang | san | 男 |
| zhang | NULL | 男 |
| Thomas | Jay | NULL |
+------------+-----------+------+
3 rows in set
2、统计重复数据
mysql> select * from person_tbl;
+------------+-----------+------+
| first_name | last_name | sex |
+------------+-----------+------+
| zhang | san | 男 |
| zhang | san | 男 |
| zhang | san | 男 |
| Thomas | Jay | NULL |
| Thomas | Jay | NULL |
| li | san | 男 |
| zhang | si | 男 |
+------------+-----------+------+
7 rows in set
select count(*) repetitions, last_name, first_name
from person_tbl
GROUP BY last_name, first_name
having repetitions > 1;
+-------------+-----------+------------+
| repetitions | last_name | first_name |
+-------------+-----------+------------+
| 3 | san | zhang |
| 2 | Jay | Thomas |
+-------------+-----------+------------+
2 rows in set
以上查询语句将返回 person_tbl 表中重复的记录数。 一般情况下,查询重复的值,请执行以下操作:
- 确定哪一列包含的值可能会重复。
- 在列选择列表使用COUNT(*)列出的那些列。
- 在GROUP BY子句中列出的列。
- HAVING子句设置重复数大于1。
3、过滤重复数据
如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。
select distinct last_name, first_name from person_tbl;
+-----------+------------+
| last_name | first_name |
+-----------+------------+
| san | zhang |
| Jay | Thomas |
| san | li |
| si | zhang |
+-----------+------------+
4 rows in set
你也可以使用 GROUP BY 来读取数据表中不重复的数据:
select last_name, first_name from person_tbl
group by last_name, first_name;
4、删除重复数据
CREATE TABLE tmp
SELECT last_name, first_name, sex
FROM person_tbl
GROUP BY (last_name, first_name, sex);
DROP TABLE person_tbl;
ALTER TABLE tmp RENAME TO person_tbl;
或者在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:
ALTER IGNORE TABLE person_tbl ADD PRIMARY KEY (last_name, first_name);
问题?
删除重复数据代码实现不了Operand should contain 1 column(s)
以上是关于24处理重复数据的主要内容,如果未能解决你的问题,请参考以下文章
设置onclick侦听器在android中无法从一个片段移动到另一个活动[重复]