Mysql 使用带和不带外键的引用之间的区别?

Mysql 使用带和不带外键的引用之间的区别?,mysql,sql,database,relational-database,Mysql,Sql,Database,Relational Database,基本上,我想知道使用带外键或不带外键的引用之间的区别 我有以下两个例子: 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,

基本上,我想知道使用带外键或不带外键的引用之间的区别

我有以下两个例子:

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)
);
我想问的是,为什么第二个示例使用外键关键字,而第一个示例仅使用引用


另外,第一个似乎引用了自身(我认为员工中的s是一个错误),如果是这样,那么如果它引用自身,为什么要使用引用呢?

恭喜!你偶然发现了MySQL的一个奇怪的怪癖。第一个语法完全不起作用。它默默地,是的,默默地被忽略了

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


文档的一半还不到。

只是为了确定我是否正确理解了它。我根本不需要写外键?还有什么原因让属性Boss引用Employee(它已经声明了)?@Bluening如果希望在CREATE语句中内联外键,则必须使用示例2中的语法
外键
不是可选的(至少在MySQL接受ANSI SQL之前是如此)。@Bluening称之为自引用外键。当你认为老板仍然是雇员时,这是有道理的。但是,对于自引用键,必须修改表以添加键。不能内联添加自引用的。