【问题标题】:Create Foreign key from a primary key从主键创建外键
【发布时间】:2013-09-09 10:40:16
【问题描述】:

我正在使用 MySQL,我需要创建下表。

1st table : having 3 attributes A,B,C 
2nd table : having 2 attributes B,D
3rd table : having 2 attributes C,E

现在,A 是主键。

我需要创建第 2-3 个表,以便第 2 个表的 B 中的值应该已经存在于第 1 个表的 B 属性中,并且类似地,第 3 个表的 C 中的值应该已经存在于第 1 个表的 C 中。

我的尝试:

1) 将 A 放入第二个和第三个表中,并将它们作为外键引用第一个表的 A,并在每个表中进行更新级联。

2) 保留第二个和第三个表的检查约束,尽管当属性来自不同的表时,我找不到检查约束的正确语法。

请提出更好的选择或即兴发挥我想到的当前方法。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    使得第二个表的 B 中的值应该已经存在于第一个表的 B 属性中,并且类似地,第三个表的 C 中的值应该已经存在于第一个表的 C 中。

    为了满足第一个要求,B 必须在第一个表中声明为唯一的。为了满足第二个要求,C 在第一个表中必须是唯一的。因此,我们会得到一个结构(数据类型的选择是任意的):

    Create Table FirstTable
        (
        A varchar(50) not null Primary Key
        , B varchar(50) Unique
        , C varchar(50) Unique
        );
    
    Create Table SecondTable
        (
        B varchar(50)
        , D varchar(50)
        );
    
    Alter Table SecondTable
      Add Constraint FK_SecondTable_FirstTable_B
      Foreign Key ( B )
      References FirstTable ( B )
      On Update Cascade;
    
    Create Table ThirdTable
        (
        C varchar(50)
        , E varchar(50)
        );
    
    Alter Table ThirdTable
      Add Constraint FK_ThirdTable_FirstTable_C
      Foreign Key ( C )
      References FirstTable ( C )
      On Update Cascade;
    

    关于检查约束,MySQL 的“可爱”特性之一是,当它在 Create Table 语句中解析并接受检查约束时,它在求值时完全忽略了它们。也就是说:

    CHECK 子句被所有存储引擎解析但忽略。

    Create Table documentation

    现在,即使不是这样,SQL 语言中的 Check 约束机制也只能引用当前表中的列,因此无助于解决您的问题。

    【讨论】:

    • MySQL 解析、接受然后忽略内联 FK 约束,与 CHECK 约束相同;)
    • @ypercube - 废话。哪个 MySQL bozo 认为默默地忽略任何有关约束的事情是个好主意?! MySQL,现代的访问。无论如何,我已经适应了 Alter Table 语句。
    • 我认为它实际上会发出警告 - 但不确定。
    • @Thomas,非常感谢您的解决方案。非常感谢您的帮助。
    【解决方案2】:

    我不确定我是否完全理解这个问题。将属性 B 和 C 分别作为表 2 和表 3 的主键是不明智的。然后,您可以将它们作为第一个表中的外键引用。

    【讨论】:

    • 外键在table1中,需要从table2和table3中引用。
    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多