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插入到角色权限数据表。插入即从无到有。修改再以及存在了进行修改,删除即取消所有权限。其他功能类比即可。
待续.....