日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2023/12/18 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql无法初始化数据库引擎_mysql使用模板解决旧数据处理,默认初始化数据的通用方法!... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一 業(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。