基本上,我想知道在使用带有或不带有外键的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?
恭喜你!您偶然发现了MySQL的一种古怪怪癖。第一种语法绝对不执行任何操作。是 无声的 ,是的, 无声地 忽略了。
此外,InnoDB不识别或不支持将引用定义为列规范一部分的“内联引用规范”(按照SQL标准定义)。仅当作为单独的FOREIGN KEY规范的一部分指定时,InnoDB才接受REFERENCES子句。对于其他存储引擎,MySQL Server解析并忽略外键规范。
距离create table文档的一半还差一点。
create table