我有一个表,该表曾经使用parent_id列具有一对一的关系, 我们的逻辑发生了变化,我们需要启用多对多,因此我们 - 不幸的是 - 没有时间更改数据库模型,因此我们过去常常为每个关系插入多行,然后在代码中将它们分组。
现在我需要重构 mysql 表以反射(reflect)多对多关系。
示例
Table Blog
ID, Body, target_id, grouping
1 etc 1 1
2 etc 2 1
3 etc2 1 3
4 etc2 2 3
目前,当我们创建新的博客文章时。我们插入第一行。获取其 id,并为每个目标复制插入。
现在随着数据库变得越来越大。我们需要阻止这种情况并创建一个保存关系的中间表。所以上表将变成
Table Blog
ID, Body
1 etc
3 etc2
Table Blog_target
blog_id,target_id
1 , 1
1 , 2
3 , 1
3 , 2
那么如何将旧表中的数据拆分到新表中而不丢失mysql中的任何数据?
最佳答案
也许是这样的? new_blog 表,因为您的 blog 表已经存在,当您完成所有工作并对 new_blog 表和 blog_target 表中的数据感到满意后,您可以删除您的 blog 表并 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;
关于mysql - 将表从一对多转换为多对多 MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667445/