【问题标题】:MySQL Syntax in creating Foreign KeyMySQL 创建外键的语法
【发布时间】:2011-08-08 01:49:01
【问题描述】:

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

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 我问这个是因为我有一本电子书,它表明这是创建外键的正确方法——与 Doug 所说的相反 看起来就像 MySQL 接受它(不会抱怨语法),但实际上并没有创建外键。 这不是我的老师教我的方式。这就是为什么我试图验证这种方式是否可以接受。

标签: mysql foreign-keys


【解决方案1】:

看起来 MySQL 接受了它(不抱怨语法),但实际上并没有创建外键。

要创建这个外键,运行这个命令:

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

【讨论】:

  • 我的电子书关于创建外键的解释怎么样。 "这个语句中只有一个新的语法。employee表中的最后一列是员工工作的部门的id。这是一个外键。我们在表定义中通过添加来声明这一点引用子句如下:departmentID int not null references department(departmentID) 这告诉我们应将employee 表中的departmentID 引用回department 表中的departmentID 列。” 您对此有何看法?
  • 我自己尝试了代码,并使用您的代码创建了表,但是直到我使用我在答案中提供的代码单独创建外键后才强制执行引用完整性。
  • SQL 中的CONSTRAINT 是什么?...我尝试用谷歌搜索答案,但找不到明确的定义。提前致谢
  • @aer "表中的两行不能有相同的列值。主键也强制唯一性,但主键不允许 NULL 作为唯一值之一"
【解决方案2】:
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)
) 

【讨论】:

  • 欢迎您!为什么这个答案在 2 年后比公认的更好?
【解决方案3】:
FOREIGN KEY (departmentID) REFERENCES department(departmentID)

谢谢!

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    相关资源
    最近更新 更多