外键 SQL 语法
Foreign key SQL syntax
假设有两个 table table1
和 table2
,其中第二个引用第一个。
我想知道以下两种定义外键关系的形式是否会产生与第二个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 外键关系。使用复合主键,它会失败,因为引用应该是主键(或至少是唯一键)。
假设有两个 table table1
和 table2
,其中第二个引用第一个。
我想知道以下两种定义外键关系的形式是否会产生与第二个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 外键关系。使用复合主键,它会失败,因为引用应该是主键(或至少是唯一键)。