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

时间:2013-01-09 08:17:59

标签: 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)
);

示例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?

1 个答案:

答案 0 :(得分:17)

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

  

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

它在create table文档的中间位置不到一半。