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的初始化語句也可以通用!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql无法初始化数据库引擎_mysql使用模板解决旧数据处理,默认初始化数据的通用方法!...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常规键盘快捷键
- 下一篇: ubuntu 下mysql的常用命令