一 业务介绍

先来看看我这得大致业务需求,这次业务比较简单:

即从现在开始,每次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使用模板解决旧数据处理,默认初始化数据的通用方法!...相关推荐

  1. mysql的innodb数据库引擎详解

    http://www.jb51.net/softjc/158474.html 这篇文章主要介绍了mysql的innodb数据库引擎,需要的朋友可以参考下 一.mysql体系结构和存储引擎 1.1.数据 ...

  2. mysql常用的两种数据库引擎_Mysql数据库常用两种引擎的介绍

    1.数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIAS ...

  3. mysql的常用存储引擎_MySQL常见的三种存储引擎

    Ok,我们知道了,引擎就是一个程序的核心组件. 简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有O ...

  4. MySQL的系统数据库是_mysql数据库系统

    如何搭建 mysql数据库 1)    卸载原有的mysql   这是rpm方式安装的mysql,所以使用 rpm -e mysql --nodeps 进行卸载 2)    挂载之后打开 3)     ...

  5. mysql 查看函数fsync_查看MySql使用的数据库引擎

    查看使用的数据库引擎  show variables like '%storage_engine%'; 显示的使用的是InnoDB 查看引擎状态   show engine innodb status ...

  6. mysql常用的存储引擎_Mysql存储引擎

    什么是存储引擎? 关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式.有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取 ...

  7. mysql支持数据安全的引擎_MySQL 支持的存储引擎

    存储引擎: 数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作. 不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎还可以获得 ...

  8. mysql常用 的数据库引擎

    一.MyISAM存储引擎 MyISAM基于ISAM存储引擎,并对其进行扩展.它是在Web.数据仓储和其他应用环境下最常使用的存储引擎之一.MyISAM拥有较高的插入.查询速度,但不支持事物.MyISA ...

  9. mysql有那些存储引擎_MySQL有那哪些存储引擎

    实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过于InnoDB和MyISAM了. 所 ...

最新文章

  1. java jsp 文件上传_用JSP编写文件上传
  2. 能拯救你的人也只能是自己
  3. HTML5常用标签~
  4. 石头剪刀布php源码,php实现的网页版剪刀石头布游戏示例
  5. Stone game(dp计数上海icpc网络预选赛)
  6. 瀑布模型 原型模型 增量模型 螺旋模型的优缺点
  7. JDK源码系列(5)-StringBuffer
  8. 基于电能计量芯片HLW8012计量插座方
  9. NACOS 2.0.3 集群客户端连接出现503 500异常处理 踩坑记录
  10. 2021Java实现关注公众号登陆网站
  11. 服务器系统文件sam在哪里,SAM文件介绍
  12. Modern Family 开篇语
  13. STM8S(stm8s003F) ADC AIN7的使用
  14. BT技术概念 — 一些术语的意思
  15. python毕业设计作品基于django框架 景区购票系统毕设成品(4)开题报告
  16. java怎么查看jdk版本_java版本和jdk版本必须一样
  17. diy 单片机 自动浇花_基于单片机的自动浇花器设计
  18. 2022茶艺师(中级)特种作业证考试题库及答案
  19. vue form表单数据提交与 router 按钮快速调用页面
  20. python京东自动签到_Python 实现京东自动签到领京豆

热门文章

  1. When will the reference ATTRIBUTE_REF of an BOL entity be cleared
  2. nodejs TCP server和TCP client如何进行数据交互
  3. 查看SAP CRM和C4C的UI technical信息
  4. sqlplus连接不上oracle,环境变量设置错误导致sqlplus 连接不上oracle
  5. php魔术方法例子,PHP中魔术方法的使用举例
  6. 上下界网络流-无源汇可行流与有源汇最大流
  7. 数据可视化|实验一 绘图基础语法和常用参数
  8. python像素处理_Python+OpenCV图像处理(五)—— 像素运算
  9. 网站不大但加载很慢怎么优化_博客网站首页加载优化
  10. python 爬虫 标签文本beautifullsoup_【Python爬虫】学习BeautifulSoup