2016-04-16 22 views
0

我有一个表,用来使用parent_id列有一对一的关系, 我们的逻辑已经改变了,我们需要启用多对多的功能,所以我们不会 - 不需要改变数据库模型,所以我们用来为每个关系插入多行,并将它们在代码之后分组。将表从一个到多个转换为多个到多个MYSQL

现在我需要重构mysql表来反映多对多的关系。

例如

Table Blog 
ID, Body, target_id, grouping 
1 etc  1   1 
2 etc  2   1 
3 etc2 1   3 
4 etc2 2   3 

目前,当过我们正在创造一个新的博客文章。我们插入第一行。 grap它的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

这样的事情可能吗? 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