【问题标题】:Foreign key SQL syntax外键 SQL 语法
【发布时间】:2017-07-17 10:52:56
【问题描述】:

假设有两个表table1table2,其中第二个引用第一个。

我想知道以下两种定义它们的外键关系的形式是否会导致第二个表的表结构相同。

CREATE TABLE table1(a INT, b INT, PRIMARY KEY(a, b));

1)

CREATE TABLE table2(a INT, b INT,
    FOREIGN KEY(a, b) REFERENCES table1(a, b)
);

2)

CREATE TABLE table2(a INT, b INT,
    FOREIGN KEY(a) REFERENCES table1(a),
    FOREIGN KEY(b) REFERENCES table1(b)
);

我认为没有区别,但找不到任何参考来支持这种说法。

【问题讨论】:

  • 您为什么不尝试运行您的代码?第一次创建应该失败(超过一个 PK)。而且#2和#3有很大的不同,#2是多列FK,#3是两个单列FK。
  • 它们有很大的不同。第一个单独定义外键,第二个定义引用该键的外键。这不仅仅是句法上的差异。
  • @SkryptX 谢谢老兄,完美答案
  • @dnoeth 好的,是的。我很不耐烦。我会更新问题

标签: sql foreign-keys multiple-columns


【解决方案1】:

首先,这个语法不正确:

CREATE TABLE table1 (
    a INT PRIMARY KEY,
    b INT PRIMARY KEY
);

主键是primary,因为只能定义一个。大概,您打算使用复合主键:

CREATE TABLE table1 (
    a INT,
    b INT,
    PRIMARY KEY (a, b)
);

外键关系完全不同。第二个创建两个外键关系。使用复合主键会失败,因为引用应该是主键(或至少是唯一键)。

【讨论】:

  • 是的,我把问题搞砸了。我对多列外键和多个外键之间是否有区别很感兴趣
猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2011-05-13
  • 2015-04-17
  • 2017-07-27
  • 2011-07-14
相关资源
最近更新 更多