我有一个表,曾经使用parent_id列一对一关系, 我们的逻辑发生了变化,我们需要启用多对多,所以我们 - 不用多久 - 没有奢侈的改变数据库模型,因此我们习惯为每个关系插入一行,并在代码中将它们分组。
现在我需要重构mysql表以反映多对多的关系。
例如
Table Blog
ID, Body, target_id, grouping
1 etc 1 1
2 etc 2 1
3 etc2 1 3
4 etc2 2 3
目前,我们何时创建新的博文。我们插入第一行。绘制其id,并为每个目标复制插入。
所以现在db变大了。我们需要停止它并创建一个保持关系的中间表。所以上表将成为
Table Blog
ID, Body
1 etc
3 etc2
Table Blog_target
blog_id,target_id
1 , 1
1 , 2
3 , 1
3 , 2
那么如何将旧表中的数据拆分为新表而不会丢失mysql中的任何数据?
答案 0 :(得分:1)
这样的事可能吗? new_blog表因为您的博客表已经存在,在您完成所有操作并对new_blog表和blog_target表中的数据感到满意之后,您可以放下博客表并RENAME TABLE new_blog TO blog;
INSERT INTO new_blog(ID, Body)
SELECT DISTINCT grouping, body FROM blog;
INSERT INTO blog_target(blog_id,target_id)
SELECT grouping,target_id
FROM blog;