我们假设有两个表table1
和table2
,其中第二个表引用第一个表。
我想知道以下两种定义外键关系的方式是否会导致第二个表的表结构相同。
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)
);
我认为没有区别,但无法找到任何支持此声明的参考。
答案 0 :(得分:1)
首先,这种语法不正确:
CREATE TABLE table1 (
a INT PRIMARY KEY,
b INT PRIMARY KEY
);
主键是 primary ,因为只能定义一个。据推测,您打算使用复合主键:
CREATE TABLE table1 (
a INT,
b INT,
PRIMARY KEY (a, b)
);
外键关系完全不同。第二个创建两个外键关系。使用复合主键时,它将失败,因为引用应该是主键(或至少是唯一键)。