目录

1.前言

2. 解决思路

2.1 查询重复数据

2.2使用insert ignore .....SQL语句忽略重复

2.3 清空数据库,重新插入数据

2.4 不动数据库,查询忽略重复数据

2.5 定向删除数据库的重复数据

3. 总结

1. 前言

前几天,调用第三方接口将接口数据存到数据库,处理逻辑上应该是没有问题的,但检查的时候,发现数据库居然出现数据重复的情况,下面我们来看看为什么会出现这样的情况,在读取数据的时候怎么预防这样的Bug??

2. 解决思路

2.1 查询重复数据

首先,先查询重复数据,SQL语句如下:

SELECT COUNT(*) as repetitions, partnerid

FROM t_ystaccountfile_detail

GROUP BY partnerid

HAVING repetitions > 1;

以上查询语句将返回 t_ystaccountfile_detail 表中重复的记录数。 一般情况下,查询重复的值,执行以下操作:

确定哪一列包含的值可能会重复。

在列选择列表使用COUNT(*)列出的那些列。

在GROUP BY子句中列出的列。

HAVING子句设置重复数大于1。

2.2使用insert ignore .....SQL语句忽略重复

INSERT IGNORE INTO 与 INSERT INTO 的区别就是 INSERT IGNORE 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

区别如下:

指令

已存在

不存在

举例

insert

报错

插入

insert into names(name, age) values(“小明”, 23);

insert ignore

忽略

插入

insert ignore into names(name, age) values(“小明”, 24);

replace

替换

插入

replace into names(name, age) values(“小明”, 25);

(1)插入已存在,忽略新插入的记录,id会自增,不会报错

mysql> insert ignore into names(name, age) values("大壮", 25);

Query OK, 0 rows affected, 1 warning (0.00 sec)

(2)插入不存在,添加新的记录

mysql> insert ignore into names(name, age) values("壮壮", 25);

Query OK, 1 row affected (0.01 sec)

2.3 清空数据库,重新插入数据

该方法适合数据量不大,而且接口支持指定日期查询,开发者只需要编写一个循环入库函数即可实现(使用该方法需要确保插入数据是不重复的)

2.4 不动数据库,查询忽略重复数据

如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

比如下面SQL语句:

$sql = "SELECT DISTINCT * FROM `t_ystaccountfile_detail` AS p1 WHERE {$where}  ORDER BY `id` DESC limit {$limits}";

当然,也可以使用GROUP BY 来分类读取数据表中不重复的数据:

select 字段名 from 数据表 group by 字段名;

2.5 定向删除数据库的重复数据

先创建临时表,将数据不重复的插入到临时表,然后再删除原表,将临时表名改为原表名,操作如下:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl GROUP 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);

3. 总结

出现错误不要紧,主要是如何解决以及预防以后同样的错误发生,解决数据库数据重复的问题方法还是挺多的,主要是根据业务和实际情况来处理,最后,共勉~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐