【问题标题】:Add relation between two existing/filled tables in MySQL在 MySQL 中添加两个现有/填充表之间的关系
【发布时间】:2017-07-08 21:09:48
【问题描述】:

不久前,当我创建一个包含两个表(TopicsCategories,每个主题都被分类)的数据库时,我没有考虑如何正确建模这两个表之间的关系,因为我非常缺乏经验MySQL 和一般数据库。

我的简单方法是在Topics 表的Category 列中插入类别名称。

现在我必须更改一些类别名称,我对这个决定感到遗憾,因为除了更改它之外,我还必须同化 Topics 表中的所有相关条目。使用正确的 MySQL 语句很容易做到这一点,但这是一个非常混乱的解决方案。

所以我想知道是否仍然可以将预期的关系添加到现有表中。到目前为止,我已经尝试了一些在类似主题中发现的方法,但大多数都是关于其他问题的。 Topics 类别列和 Categories 名称列共享相同的值:类别名称可能会有所帮助。

主题:

+----+------+----------+------+
| Id | Name | Category | Date |
+----+------+----------+------+

分类:

+------+-------------+
| Name | Description |
+------+-------------+

感谢所有解决方案或提示,无论是命令行还是 phpmyadmin!

【问题讨论】:

    标签: mysql phpmyadmin foreign-keys


    【解决方案1】:

    为类别添加 ID:

    enter code here`ALTER TABLE `categories` ADD `Id` INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`Id`);
    

    为主题添加类别 ID:

    ALTER TABLE `topics` ADD `Category_Id` INT NOT NULL AFTER `Name`;
    

    然后根据Category更新Category ID:

    UPDATE `topics`, `categories` SET `topics`.`Category_Id` = `categories`.`Id` WHERE `topics`.`Category` = `categories`.`Name`
    

    验证一切正常后,更改任何引用 topics.Category 的代码并使用 JOIN 连接表并改用 categories.Name,然后删除 categories.Name 字段.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多