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

Blu*_*ing 14 mysql sql database relational-database

基本上我想知道使用带有或不带外键的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)
);
Run Code Online (Sandbox Code Playgroud)

例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)
);
Run Code Online (Sandbox Code Playgroud)

我在这里问的是为什么第二个例子使用FOREIGN KEY关键字,而第一个例子仅使用REFERENCES.

此外,第一个似乎引用自己(我认为员工中的s是一个错误)如果是这样,为什么它使用REFERENCES如果它引用自己?

Cor*_*bin 18

恭喜!你偶然发现了一个奇怪的MySQL怪癖.第一种语法绝对没有.它默默地,是的,默默地被忽略了.

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

它只是create table文档的一半.

  • @Bluening 这就是所谓的自引用外键。当你考虑到老板仍然是雇员时,这实际上是有道理的。但是,对于自引用键,您必须更改表才能添加键。自引用的不能内联添加。 (2认同)