外键 SQL 语法

Foreign key SQL syntax

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

我想知道以下两种定义外键关系的形式是否会产生与第二个table相同的table结构。

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)
);

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

首先,这个语法不正确:

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

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

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

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