将表从一个转换为多个到多个MYSQL

时间:2016-04-16 17:35:00

标签: mysql many-to-many

我有一个表,曾经使用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中的任何数据?

1 个答案:

答案 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;

sqlfiddle