增量数据,如果下次增量数据存在重复数据,如何解决。

1、如果增量数据,每次增量数据可能会存在增量数据,如何解决。思路,首先可以复制一个备份表,然后将主表中存在的数据,在备份表中进行删除,然后将备份表插入到主表,最后在下次增量之前,将备份表截断或者清空表即可。

参考连接:https://www.cnblogs.com/Csir/p/7928037.html

步骤一、清空临时表;
TRUNCATE table 数据表名称;
步骤二、删除重复数据(旧数据)、mysql delete两种关联删除方式;

案例一、
DELETE t1 FROM t1,t2 WHERE t1.id=t2.id; 或 DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id; 
案例二、
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;


-- 1、删除两个数据表中重复的数据(两个数据表中重复的都会删除)
DELETE FROM a1,a2 USING apple AS a1 INNER JOIN apple_bak AS a2 WHERE a1.`name`=a2.`name`;
-- 2、删除主表数据表中重复的数据(旧数据),但是临时表中的重复数据不删除,用于将这些数据重新导入到旧数据
DELETE FROM a1 USING apple AS a1 INNER JOIN apple_bak AS a2 WHERE a1.`name`=a2.`name`;
或者
DELETE into_table FROM apple AS into_table INNER JOIN apple_bak AS from_table where into_table.`name`=from_table.`name`;

-- 3、删除备份数据表中重复的数据,但是主表中的重复数据不删除
DELETE FROM a2 USING apple AS a1 INNER JOIN apple_bak AS a2 WHERE a1.`name`=a2.`name`;
或者
DELETE from_table FROM apple AS into_table INNER JOIN apple_bak AS from_table where into_table.`name`=from_table.`name`;



步骤三、将增量数据导入到目标数据表中(此时已经将重复数据或者旧数据已经删除干净了);
INSERT INTO apple(`name`, `age`, `birthday`, `sex`, `create_time`, `update_time`) 
SELECT `name`, `age`, `birthday`, `sex`, `create_time`, `update_time` FROM apple_bak;

 2、常用的功能设计思路总结

-- 查询全部信息
select * from db_company;

-- 模拟插入,可以插入第一级和附属级别的信息
insert into db_company(type,name,versions,code,parent_id,short_name,c_desc) VALUES("研发机构","总部",1,"C01",0,"北京xxx基地总部","北京xxx逗比总部");
insert into db_company(type,name,versions,code,parent_id,short_name,c_desc) VALUES("研发机构","研发一部",1,"C02",0,"北京xxx基地研发一部","北京xxx逗比研发一部");
insert into db_company(type,name,versions,code,parent_id,short_name,c_desc) VALUES("研发机构","研发二部",1,"C03",1,"北京xxx基地研发二部","北京xxx逗比研发二部");
insert into db_company(type,name,versions,code,parent_id,short_name,c_desc) VALUES("研发机构","研发三部",1,"C04",1,"北京xxx基地研发三部","北京xxx逗比研发三部");

insert into db_company(type,name,versions,code,parent_id,short_name,c_desc) VALUES("销售机构","销售总部",1,"C01",0,"北京xxx基地销售总部","北京xxx逗比销售总部");
insert into db_company(type,name,versions,code,parent_id,short_name,c_desc) VALUES("销售机构","销售一部",1,"C02",0,"北京xxx基地销售一部","北京xxx逗比销售一部");
insert into db_company(type,name,versions,code,parent_id,short_name,c_desc) VALUES("销售机构","销售二部",1,"C03",1,"北京xxx基地销售二部","北京xxx逗比销售二部");
insert into db_company(type,name,versions,code,parent_id,short_name,c_desc) VALUES("销售机构","销售三部",1,"C04",1,"北京xxx基地销售三部","北京xxx逗比销售三部");

-- 可以查询出每个层级以及其父层级的名称
SELECT
    db_c.*,
    ( SELECT NAME FROM db_company WHERE id = db_c.parent_id ) AS parent_name 
FROM
    db_company db_c;

-- 可以查询出用户的信息以及其所属单位或者部门或者班级等等的全部信息
select u.*,db_c.* from user u,db_company db_c where u.id =2 and u.company_id = db_c.id;


-- 用户角色关联,主要是可以获取到用户信息和用户的多个角色信息。代码逻辑使用for循环遍历出全部角色信息。然后调用插入到用户信息的方法,和for循环遍历调用插入用户角色信息的方法。
insert into user(name,age,birthday,sex,create_time,update_time) values("小鲁班",18,"2018-11-1 09:19:19",'男','2018-10-30 19:25:07.571059','2018-10-30 19:25:07.571');

-- 使用for循环调用插入用户角色信息的方法。(提前使用插入角色的方法查询出角色,才可以插入用户的某种角色)
-- 查询出所有角色,方便自己选择
select * from role;

-- for循环调用插入用户角色方法的sql,栗子
insert into userRole(userId,roleId,create_time,update_time) VALUES(1,2,'2018-10-30 19:25:07.578055','2018-10-30 19:25:07.578055');

-- 修改用户角色关联,首先获取到要修改的用户的信息和用户的id,然后获取到所有赋予用户的角色的信息。类似用户角色关联。重点在于在业务层,首先调用根据用户的id来修改用户的信息,就是一个普通的用户信息修改。然后就删除userRole数据表里面此id用户的所有角色信息。即删除此id的所有用户角色关联信息。最后for循环遍历插入该id的所有新的用户角色关联的信息。即可完成用户和用户角色关联信息的修改。

-- 如果想要查询用户的所有角色信息,可以单独使用一个方法来进行查询,根据用户的id查询出所有的用户关联的角色的信息。
-- 具体实现可以如此实现,加入没有外键关联,而是第三张表进行用户角色关联的话,可以根据在用户角色表里面的userId的值(查询的入口)和角色的id和用户角色的roleId相等。from角色表和用户角色表。
    
-- 删除用户的时候,如此操作,首先获取到要删除的用户的id,然后删除此id的用户的信息,然后根据此用户id即userId,然后删除用户角色表里面的该用户的所有角色信息。

-- 密码重置,即设置一个默认值,然后使用update的sql进行即可。

-- 账号激活功能,即将一个flag值进行修改,栗子如0不激活,1激活状态。

-- 角色管理功能,给角色关联预警类型,权限类型,菜单类型。就是给角色赋予某种权力,然后把角色再赋予某个用户的功能。
-- 角色关联权限(插入和修改以及删除功能的理解),根据角色的roleId删除角色权限表的该roleId角色的所有权限,然后使用for循环遍历将roleId和menuId插入到角色权限数据表。插入即从无到有。修改再以及存在了进行修改,删除即取消所有权限。其他功能类比即可。

待续.....

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

merge语句导致的性能问题紧急优化 (r9笔记第85天)

晚上正在休息的时候,突然收到一封报警邮件。 报警内容: CPU utilization is too high ------------------------...

2805
来自专栏lonelydawn的前端猿区

MySQL应用优化

一、基本语句优化原则 (1).尽量避免在索引列上进行运算或函数操作,这样会导致索引失效 如: select * from t where Year(d)>=20...

1935
来自专栏决胜机器学习

数据库专题(二) ——数据库设计

数据库专题(二)——数据库设计 (原创内容,转载请注明来源,谢谢) 一、数据库设计规范——范式 数据库设计,需要遵循设计原则,最主要的设计原则是范式。范式是...

3557
来自专栏前端黑板报

MySQL之什么是MySQL

这篇教程是帮助你回答:什么是MySQL?以及告诉你为何 MySQL 是世界上最流行的开源数据库的原因。

2074
来自专栏杨建荣的学习笔记

用Oracle的眼光来学习MySQL 5.7的sys(下)(r11笔记第25天)

昨天写了篇分析sys的文章,用Oracle的眼光来学习MySQL 5.7的sys(上)(r11笔记第24天) 收到了一些朋友的反馈,还不错,今天继续努力,再整理...

36213
来自专栏数据和云

DBA入门之路:察微知渐细致入微

在DBA的职业生涯中,要面临无数的艰难险阻、排忧解难,所以细致入微,严谨认真的风格必不可少。养成了察微知渐的习惯,才能在分析诊断故障时层剖缕析,直指核心;而我也...

2113
来自专栏代码世界

数据库三范式详解

范式的概念   为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计...

3888
来自专栏bboysoul

给自己的主机测个速度

昨天有人问我,为什么他的国外服务器看有土鳖的视频那么卡,其实归纳一下有下面这么几点导致你的服务器速度不高

1012
来自专栏IT大咖说

如何让数据增量更新节省资源,耗时减半

内容来源:本文内容由阿里大数据计算服务(MaxCompute)团队投稿提供。IT 大咖说(微信id:itdakashuo)经授权发布,转载请标明出处。

1405
来自专栏乐沙弥的世界

数据库三范式

版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。

965

扫码关注云+社区