创建MySQL外键的语法

10

在创建外键时,这种语法是否正确?

create table department
(
  departmentID int not null auto_increment primary key,
  name varchar(30)
) type=InnoDB;

create table employee
(
  employeeID int not null auto_increment primary key,
  name varchar(80),
  job varchar(30),
  departmentID int not null references department(departmentID)
) type=InnoDB;

为什么不试一下呢?MySQL在检查语法方面比这里的任何人都更好。 - zerkms
3
@zerkms 我问这个问题是因为我有一本电子书,它显示这是创建外键的正确方法-与Doug所说的相反。看起来MySQL接受它(不会抱怨语法),但实际上并没有创建外键。这不是我的教练教给我的方法。这就是为什么我尝试验证这种方式是否可接受。 - Aaron
3个回答

19

看起来MySQL接受此语法(不会抱怨),但实际上未创建外键。

要创建此外键,请运行以下命令:

ALTER TABLE employee ADD CONSTRAINT fk_department FOREIGN KEY (departmentID) REFERENCES department (departmentID);

关于我的电子书中创建外键的解释,您觉得怎么样?这个语句中只有一个新的语法。员工表中的最后一列是员工所在部门的ID,这是一个外键。我们通过在表定义中添加引用子句来声明它,如下所示:departmentID int not null references department(departmentID)这告诉我们,在员工表中的departmentID应该参考到部门表中的departmentID列。 - Aaron
2
我自己尝试了这段代码,使用你的代码创建了表格,但是参照完整性并没有被强制执行,直到我单独使用我在答案中提供的代码创建了外键。 - Doug
什么是SQL中的“CONSTRAINT”?我尝试通过谷歌搜索来寻找答案,但是我没有找到清晰的定义。提前致谢。 - Aaron
@aer "表中的任意两行都不能具有相同的列值。主键也强制唯一性,但主键不允许将NULL作为其中一个唯一值" - Navin

5
create table employee
(
  employeeID int not null auto_increment primary key,
  name varchar(80),
  job varchar(30),
  departmentID int not null ADD CONSTRAINT fk_department FOREIGN KEY (departmentID) references department(departmentID)
) 

5
欢迎!为什么这个答案比两年前被接受的那个更好? - STT LCU

1
FOREIGN KEY (departmentID) REFERENCES department(departmentID)

Thanks.!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接