mysql使用模板解决旧数据处理,默认初始化数据的通用方法!
一 业务介绍
先来看看我这得大致业务需求,这次业务比较简单:
即从现在开始,每次new一个爷爷都需要默认初始化给这个爷爷三个儿子(子表,爷爷id去关联),并在初始化每个儿子的同时再给每个儿子初始化若干个孙子(爸爸表的子表,爸爸id关联),
这么说可能比较绕,综艺就是在爷爷表插入一条数据的同时,往父表插入固定的几条记录,然后往父表插入每条记录的同时再往儿子表插入固定的记录,之间都是用主键关联,表名分别是:
爷爷 : pm_project
爸爸: pm_role (project_id 关联爷爷)
儿子: pm_role_app ()role_id 关联爸爸,同时project_id再关联爷爷)
需要new的儿子的模板表:pm_project_app_filter, 因为业务需要,孙子模板放在单独的表中,爸爸模板放在自己表中,爷爷id设为-1.
二 初始化父表
我们先不考虑java在新建爷爷时的处理方式,来看旧爷爷的处理.
首先准备爸爸的模板,即new一个爷爷时,需要初始化爸爸是几个,分别有什么具体要求,那么可以直接在爸爸表里建立业务需要的模板,只需要将爷爷id设置为-1即可:

如图,有了这三个模板之后,我们就可以先给每个旧的爷爷三个他们的儿子,这里采用笛卡尔积批量插入处理:
insert into pm_role (id,role_code,role_name,project_id,is_del)
(select
lpad(UUID_SHORT(),32,UUID_SHORT()),
t2.role_code,
t2.role_name,
t1.id,
t2.is_del
FROM pm_project t1,pm_role t2 where t2.project_id="-1");
即关联爷爷和爸爸表,然后筛选出爷爷id=-1的三个模板儿子,与爷爷表中每个爷爷产生笛卡尔积,给每个爷爷三个儿子,完成,注意,
这里主键采用lpad函数,不建议使用UUID,原因是有的mysql引擎性能如果过于强大就会报错,因为速度太快,造成主键重复,来不及随机
三 初始化子表
再来看孙子表中需要的模板,处于特殊业务需求,这里孙子表的某个字段需要的数据采用另一张表的模板存储:

即孙子表每个孙子都需要一个app_id,也就是说,每个爸爸有三个不同app_id的儿子,这个根据业务可以随意调整,然后初始化:
insert into pm_role_app(
id,
project_id,
role_id,
app_id,
data_scope
)
select
lpad(UUID_SHORT(),32,UUID_SHORT()),
t1.project_id,
t1.id,
t2.app_id,
case when t2.app_id="46d577d4dcb344b583e7254dee3d6dba" then 3 else 1 END
FROM pm_role t1,pm_project_app_filter t2 where t1.project_id!="-1";
这时候关联爸爸表和这个模板表,并排除爸爸表中的模板 ,然后给每个爸爸都生成三个带有模板app_id的儿子,就可以了,这里也采用批量插入.
四 新建爷爷时处理的逻辑
这里主要就是按照业务写代码就可以了,没什么要说的,直接贴代码:
保存爷爷:
dao.save(pMProject);
pmRoleService.init(pMProject.getId());//用爷爷id,保存三个爸爸
保存爸爸:

保存儿子:
,
这样,以后如果要多的每次需要多的儿子或者爸爸,只需要在模板表中添加一条记录,或者在常量类中多配置一个爸爸模板即可,便于后期维护扩展,sql的初始化语句也可以通用!
mysql使用模板解决旧数据处理,默认初始化数据的通用方法!的更多相关文章
- mysql mysqldump只导出表结构或只导出数据的实现方法
mysql mysqldump只导出表结构或只导出数据的实现方法,需要的朋友可以参考下. mysql mysqldump 只导出表结构 不导出数据 复制代码代码如下: mysqldump --opt ...
- [MFC]解决回车键 ESC 默认关闭窗口的一般方法
在一般情况下编写的对话框程序,用户在运行的时候,如果不注意按下了ENTER或者ESC键,程序就会立刻退出,之所以会这样,是因为按下Enter键时,Windows就会自动去找输入焦点落在了哪一个按钮上, ...
- 解决设置select默认选中不生效的方法
$scope.storageTypeList = ['Glusterfs','NFS','Ceph']; 不生效的方法: <select class="form-control&quo ...
- Oracle GoldenGate从oracle db 到非oracle db的初始化数据同步的方法
非oracle db以 sqlserver为样例说明: 我的思路 A :oracle db 生产 B: oracle db 中间机 C: sqlserver db 目的端 A-> B-> ...
- mysql学习之-密码管理(默认密码,修改密码,解决忘记密码)
1. mysql安装后默认没有密码,初始化安装后默认密码登录,需要马上修改root密码.[root@mysql ~]# cat /root/.mysql_secret --查看root账号密码# ...
- 使用mysql悲观锁解决并发问题
最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下: 悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持 ...
- 使用mysql乐观锁解决并发问题
案例说明: 银行两操作员同时操作同一账户.比如A.B操作员同时读取一余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户扣除50元,A先提交,B后提交.最后实际账户余额为1000 ...
- 使用mysql乐观锁解决并发问题思路
本文摘自网络,仅供个人学习之用 案例说明: 银行两操作员同时操作同一账户.比如A.B操作员同时读取一余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户扣除50元,A先提交,B后 ...
- MySQL使用可重复读作为默认隔离级别的原因
一般的DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle.SQL Server等,而MySQL却使用可重复读(Read-Repeatable,RR). ...
随机推荐
- 【版本管理】git本地操作
1.初始化一个Git仓库,使用git init命令. 2.添加文件到Git仓库,分两步: • 第一步,使用命令git add 文件名,注意,可反复多次使用,添加多个文件: • 第二步,使用命令git ...
- 在HL引擎中制作自定义高清贴花
你是不是想过要做自定义的子弹孔.喷漆或者一些自定义的痕迹呢? 如果按照HL引擎的基本FA,首先要在decals.wad里加入我们自定义的纹理,然后利用gEngfuncs.pEfxAPI->R_D ...
- BZOJ2958 序列染色(动态规划)
令f[i][0/1/2][0/1]表示前i位,不存在满足要求的B串和W串/存在满足要求的B串不存在W串/存在满足要求的B串和W串,第i位填的是B/W的方案数.转移时考虑连续的一段填什么.大讨论一波后瞎 ...
- mysql事务隔离级别设置
设置innodb的事务级别方法是:set 作用域 transaction isolation level 事务隔离级别: 若没有输入作用域直接修改transaction isolation,显示修改成 ...
- Spanning Tree Protocol (STP) in NetScaler Appliance
Spanning Tree Protocol (STP) in NetScaler Appliance 来源 https://support.citrix.com/article/CTX112341 ...
- MT【152】不患寡而患不均
((清华2017.4.29标准学术能力测试1) $a_1,a_2,\cdots,a_9$ 是数字$1$到$9$ 的一个排列,则 $a_1a_2a_3+a_4a_5a_6+a_7a_8a_9$ 的最小值 ...
- 洛谷 P2431 正妹吃月饼 解题报告
P2431 正妹吃月饼 题目描述 今天是中秋节.\(uim\)带来了一堆大小不同且味道各异的月饼. 这些月饼的质量分别是\(1g\),\(2g\),\(4g\),\(8g\),\(16g\)....后 ...
- WEB入门一 网页设计基础
本章简介 在当今社会,网页是网络信息共享和发布的主要形式.而HTML (Hyper Text Mark-up Language),即超文本标记语言,是创建网页基础.本章将学习HTML文档的基本结构.组 ...
- 学习操作Mac OS 之安装工具组件
视频软件: MPlayerX 安装MySQL: 下载MySQL: https://dev.mysql.com/downloads/installer/ 设置环境变量:http://www.cnblog ...
- OpenCV入门指南----人脸检测
本篇介绍图像处理与模式识别中最热门的一个领域——人脸检测(人脸识别).人脸检测可以说是学术界的宠儿,在不少EI,SCI高级别论文都能看到它的身影.甚至很多高校学生的毕业设计都会涉及到人脸检测.当然人脸 ...