【问题标题】:How to add relationships between tables in existing MySQL database?如何在现有 MySQL 数据库中添加表之间的关系?
【发布时间】:2011-09-06 18:04:42
【问题描述】:

我有一个现有的 MySQL 数据库,其中包含大量表。

但问题是没有添加表之间的关系。如何在现有 MySQL 数据库中的表之间添加关系?

【问题讨论】:

标签: mysql database foreign-keys entity-relationship


【解决方案1】:

类似的东西

ALTER TABLE `table1` ADD CONSTRAINT table1_id_refs FOREIGN KEY (`table2_id`) REFERENCES `table2` (`id`);

【讨论】:

    【解决方案2】:

    其他人已经给出了关于如何在 SQl 代码中实现约束的答案。但最大的问题在于,由于您已经没有这个约束,您现在可能没有数据完整性。

    首先您确定哪些记录不符合约束条件。接下来,您决定如何处理它们并修复它们,删除它们或您决定的任何事情。然后在数据干净后创建约束。

    如果您已经有不良数据,有时您可以做的最好的事情是为“未知”添加一个父记录,并将所有没有现有父记录的子记录附加到它。例如,如果这些是具有财务的实际订单附加到它们的值您不想删除(这会破坏财务报告),然后使用未知客户。

    在其他情况下,您可以安全地删除字段中的信息或整条记录。假设您想添加到状态表的链接,其中地址表作为子表。假设现在它的状态为 107,而您的状态 ID 不是 107。最好有一个根本无法使用的地址(例如,您不能邮寄到状态未知)并因此删除记录或将状态字段留空(因为您的用户可以联系客户并填写它,并且您有一个不想丢失的街道地址。

    只有您可以决定您的特定应用程序以及如何处理当前不良记录。而且由于您现在没有任何限制,因此您有不良记录的可能性非常高。

    【讨论】:

      【解决方案3】:

      来自the docs 给现有表添加外键约束的语法是

      ALTER TABLE tbl_name
          ADD [CONSTRAINT [symbol]] FOREIGN KEY
          [index_name] (index_col_name, ...)
          REFERENCES tbl_name (index_col_name,...)
          [ON DELETE reference_option]
          [ON UPDATE reference_option
      

      【讨论】:

        猜你喜欢
        • 2023-03-07
        • 2017-07-08
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多