mysql无法初始化数据库引擎_mysql使用模板解决旧数据处理,默认初始化数据的通用方法!...
一 業(yè)務(wù)介紹
先來(lái)看看我這得大致業(yè)務(wù)需求,這次業(yè)務(wù)比較簡(jiǎn)單:
即從現(xiàn)在開始,每次new一個(gè)爺爺都需要默認(rèn)初始化給這個(gè)爺爺三個(gè)兒子(子表,爺爺id去關(guān)聯(lián)),并在初始化每個(gè)兒子的同時(shí)再給每個(gè)兒子初始化若干個(gè)孫子(爸爸表的子表,爸爸id關(guān)聯(lián)),
這么說(shuō)可能比較繞,綜藝就是在爺爺表插入一條數(shù)據(jù)的同時(shí),往父表插入固定的幾條記錄,然后往父表插入每條記錄的同時(shí)再往兒子表插入固定的記錄,之間都是用主鍵關(guān)聯(lián),表名分別是:
爺爺 :? ?pm_project
爸爸:? ? pm_role? ? ? (project_id? 關(guān)聯(lián)爺爺)
兒子:? ? pm_role_app? ? ()role_id 關(guān)聯(lián)爸爸,同時(shí)project_id再關(guān)聯(lián)爺爺)
需要new的兒子的模板表:pm_project_app_filter, 因?yàn)闃I(yè)務(wù)需要,孫子模板放在單獨(dú)的表中,爸爸模板放在自己表中,爺爺id設(shè)為-1.
二? ?初始化父表
我們先不考慮java在新建爺爺時(shí)的處理方式,來(lái)看舊爺爺?shù)奶幚?
首先準(zhǔn)備爸爸的模板,即new一個(gè)爺爺時(shí),需要初始化爸爸是幾個(gè),分別有什么具體要求,那么可以直接在爸爸表里建立業(yè)務(wù)需要的模板,只需要將爺爺id設(shè)置為-1即可:
如圖,有了這三個(gè)模板之后,我們就可以先給每個(gè)舊的爺爺三個(gè)他們的兒子,這里采用笛卡爾積批量插入處理:
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");
即關(guān)聯(lián)爺爺和爸爸表,然后篩選出爺爺id=-1的三個(gè)模板兒子,與爺爺表中每個(gè)爺爺產(chǎn)生笛卡爾積,給每個(gè)爺爺三個(gè)兒子,完成,注意,
這里主鍵采用lpad函數(shù),不建議使用UUID,原因是有的mysql引擎性能如果過于強(qiáng)大就會(huì)報(bào)錯(cuò),因?yàn)樗俣忍?造成主鍵重復(fù),來(lái)不及隨機(jī)
三 初始化子表
再來(lái)看孫子表中需要的模板,處于特殊業(yè)務(wù)需求,這里孫子表的某個(gè)字段需要的數(shù)據(jù)采用另一張表的模板存儲(chǔ):
即孫子表每個(gè)孫子都需要一個(gè)app_id,也就是說(shuō),每個(gè)爸爸有三個(gè)不同app_id的兒子,這個(gè)根據(jù)業(yè)務(wù)可以隨意調(diào)整,然后初始化:
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";
這時(shí)候關(guān)聯(lián)爸爸表和這個(gè)模板表,并排除爸爸表中的模板 ,然后給每個(gè)爸爸都生成三個(gè)帶有模板app_id的兒子,就可以了,這里也采用批量插入.
四? 新建爺爺時(shí)處理的邏輯
這里主要就是按照業(yè)務(wù)寫代碼就可以了,沒什么要說(shuō)的,直接貼代碼:
保存爺爺:
dao.save(pMProject);
pmRoleService.init(pMProject.getId());//用爺爺id,保存三個(gè)爸爸
保存爸爸:
保存兒子:
,
這樣,以后如果要多的每次需要多的兒子或者爸爸,只需要在模板表中添加一條記錄,或者在常量類中多配置一個(gè)爸爸模板即可,便于后期維護(hù)擴(kuò)展,sql的初始化語(yǔ)句也可以通用!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的mysql无法初始化数据库引擎_mysql使用模板解决旧数据处理,默认初始化数据的通用方法!...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常规键盘快捷键
- 下一篇: ubuntu 下mysql的常用命令