一尘不染

使用带有和不带有FOREIGN KEY的REFERENCES之间的区别?

mysql

基本上,我想知道在使用带有或不带有外键的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。

另外,第一个似乎引用了自己(我认为Employees中的s是一个错误)。如果是这样,如果引用自己,为什么要使用REFERENCES?


阅读 1892

收藏
2020-05-17

共1个答案

一尘不染

恭喜你!您偶然发现了MySQL的一种古怪怪癖。第一种语法绝对不执行任何操作。是 无声的 ,是的, 无声地 忽略了。

此外,InnoDB不识别或不支持将引用定义为列规范一部分的“内联引用规范”(按照SQL标准定义)。仅当作为单独的FOREIGN
KEY规范的一部分指定时,InnoDB才接受REFERENCES子句。对于其他存储引擎,MySQL Server解析并忽略外键规范。

距离create table文档的一半还差一点。

2020-05-17