问题
源数据库的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,",所以就没有了路径;希望大神们给与指导,拜谢