基本上我想知道使用带有或不带外键的REFERENCES之间的区别。
我有这两个例子:
CREATE TABLE Employee
(
id INT,
name VARCHAR(50),
birthYear INT,
boss INT REFERENCES Employees(id),
worksAt INT NOT NULL REFERENCES Department(id) ON DELETE CASCADE,
PRIMARY KEY (id,worksAt)
);
示例2:
CREATE TABLE Department
(
id INT PRIMARY KEY,
name VARCHAR(50),
numberOfEmployees INT,
location INT NOT NULL,
country INT NOT NULL,
manager INT,
FOREIGN KEY (location,country) REFERENCES Location(locId,countryId),
UNIQUE KEY (manager)
);
我在这里问的是为什么第二个例子使用FOREIGN KEY关键字,而第一个例子仅使用REFERENCES。
此外,第一个似乎引用自己(我认为员工中的s是一个错误)如果是这样,为什么它引用自身时会使用REFERENCES?
答案 0 :(得分:17)
恭喜!你偶然发现了一个奇怪的MySQL怪癖。第一种语法绝对没有。这是默默地,是的,默默地被忽略。
此外,InnoDB无法识别或支持“内联参考规范”(如SQL标准中所定义),其中引用被定义为列规范的一部分。仅当指定为单独的FOREIGN KEY规范的一部分时,InnoDB才接受REFERENCES子句。对于其他存储引擎,MySQL Server会解析并忽略外键规范。
它在create table
文档的中间位置不到一半。