18

基本上我想知道使用带或不带外键的 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 呢?

4

1 回答 1

23

恭喜!您偶然发现了 MySQL 的一个奇怪的怪癖。第一种语法完全没有任何作用。它默默地,是的,默默地忽略。

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

create table它在文档的一半以下。

于 2013-01-09T08:21:16.773 回答