mysql旧的数据_mysql处理旧数据-使用模板以及临时表,不建议直接使用本表!!

一 业务背景新版本中新建了一个项目的角色表,即每个项目都拥有几个角色,原来历史项目是没有角色的,这就要求使用脚本对表中的历史项目进行处理,

业务需求:每个项目都要有三个角色:

表 : pm_project  项目表

pm_role   项目角色表

具体业务比较复杂,这里只考虑历史项目的直属角色的初始化,不考虑二级直属等等.

思路是准备固定的角色模板数据,然后与项目表关联产生笛卡尔积,最后插入;

二  sql

首先准备模板数据:

/*-- 准备模板默认角色 --*/

insert into pm_role (id,role_code,role_name,project_id,is_del,order_num) values(LPAD(UUID_SHORT(),32,UUID_SHORT()),"XMJL_0","项目经理","-1",0,1);insert into pm_role (id,role_code,role_name,project_id,is_del,order_num) values(LPAD(UUID_SHORT(),32,UUID_SHORT()),"GSSHR_0","工时审核人","-1",0,3);insert into pm_role (id,role_code,role_name,project_id,is_del,order_num) values(LPAD(UUID_SHORT(),32,UUID_SHORT()),"XMCY_0","项目成员","-1",0,2);

然后,创建临时表,注意,这里必须要使用临时表,否则如果直接用本表关联的话,一起执行速度快的话会导致order_num排序字段都是1,分开执行就没问题,这里类似于UUID() 与lpad()的区别,建议都使用lpad,这里也是一样的

/*-- 准备临时表 --*/

CREATE TABLE pm_role_temp like pm_role;/*--初始化角色--*/

insert intopm_role_temp (id,role_code,role_name,project_id,is_del,order_num)

(selectlpad(UUID_SHORT(),32,UUID_SHORT()),

t2.role_code,

t2.role_name,

t1.id,

t2.is_del,

t2.order_numFROM pm_project t1,pm_role t2 where t2.project_id="-1");insert into pm_role(select * frompm_role_temp);DROP TABLE pm_role_temp;

先把数据插入到临时表中,再插入到角色表中,最后删除临时表!

这很简单,但是有个大坑,因为图省事,刚开始用了本表,即直接用角色表关联,自己开发库和测试库都没问题,但是最后生产库就是有问题,排序都是1,所以保险起见,还是用临时表,记录一下!

这种情况在UUID() 和lpad()上也吃过亏,建议大家以后都用lpad(),然后如果有二级直属,即角色表中每个角色还有固定的应用什么的,继续临时表就可!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值