[MySql]数据转存问题

    问题

源数据库的id,parentid均为varchar类型,要转存到新库,新库的id,parentid均为bigint类型,甚至添加了parentids来记录结构

    思路

               添加两个字段来记录上下级关系,然后通过上下级关系批量修改parentid,最后把两个辅助字段删掉

    代码

# 添加辅助字段
ALTER TABLE coal.mt_huochang ADD old_id VARCHAR(64);
ALTER TABLE coal.mt_huochang ADD old_parent_id VARCHAR(64);
# 数据转存
INSERT INTO coal.mt_huochang(
	name,
	parentids,
	type,
	sort,
	state,
	del_flag,
	createbY,
	createDate,
	updateby,
	updatedate,
	old_id,
	old_parent_id
) 
(SELECT 
	name,
	'0,',
	2,
	ABS(PAIXU),
	0,
	0,
	1,
	SYSDATE(),
	1,
	SYSDATE(),
	id,
	parentid
from coal_llny_old.mt_port
);
# 修改parentid,parenntids
UPDATE 
	## 子表,修改parentid, parentids
	coal.mt_huochang sun
	## 父表
	LEFT JOIN 
		coal.mt_huochang father ON sun.old_parent_id = father.old_id	
SET
	sun.parentid = father.id,
	sun.parentids = CONCAT(father.parentids, father.id, ',')
WHERE
	sun.type = 2
	AND father.type = 2;# type 区分新老数据

# 删除辅助字段
ALTER TABLE coal.mt_huochang DROP old_id;
ALTER TABLE coal.mt_huochang DROP old_parent_id;

结果


添加后发现parentids并没有像想象中那样生成路径,考虑到原因可能是因为没有按照层级先后修改的原因;但是就算没有全部按照层级修改也应该有一个条幸存数据,但是并没有发现,所以认为是中间没有进行commit,所以调到的所有的parentids都是初始进去的"o,",所以就没有了路径;希望大神们给与指导,拜谢




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值