2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > mysql无法初始化数据库引擎_mysql使用模板解决旧数据处理 默认初始化数据的通用方法!...

mysql无法初始化数据库引擎_mysql使用模板解决旧数据处理 默认初始化数据的通用方法!...

时间:2020-11-27 07:06:37

相关推荐

mysql无法初始化数据库引擎_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的初始化语句也可以通用!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。