mysql - 将表从一对多转换为多对多 MYSQL

标签 mysql many-to-many

我有一个表,该表曾经使用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;

sqlfiddle

关于mysql - 将表从一对多转换为多对多 MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667445/

相关文章:

mysql - 就像运算符(operator)不工作一样,使用 spring mvc 和 hibernate

php - Jquery/PHP + 创建 MySQL 日期类型

php - 打印从mysql数据库获取的数据

mysql - 搜索三列

php - 无法使用 php 选择二进制字段

grails - Grails访问关系表

python - 外键与 Django 模型中的相关字段冲突

entity-framework - Code First Entity Framework 多对多关系

sql - Grails 多对多 sql

asp.net-mvc-3 - Simple.Data 多对多问题