【问题标题】:Can all the tables in the database contain foreign keys?数据库中的所有表都可以包含外键吗?
【发布时间】:2019-06-26 04:23:39
【问题描述】:

我正在尝试创建这样的表

CREATE TABLE department(d_name varchar(20) NOT NULL,
e_ssn int,
d_no int primary key,
mng_ssn int,
CONSTRAINT `fk_mng_ssn`
FOREIGN KEY (mng_ssn) REFERENCES Employee (ssn)
ON DELETE null) ENGINE = InnoDB;

create table Employee(f_name varchar(20) not null,
ssn int primary key,
sex varchar(5),
d_no int,
super_ssn int,
CONSTRAINT `fk_d_no`
FOREIGN KEY (d_no) REFERENCES department (d_no)
ON DELETE null) ENGINE = InnoDB;

create table dependant(dependant_name varchar(20) not null,
e_ssn int,
sex varchar(5),
CONSTRAINT `fk_e_ssn`
FOREIGN KEY (e_ssn) REFERENCES Employee (ssn)
ON DELETE CASCADE,
primary key (e_ssn,dependant_name)) ENGINE = InnoDB;

这里所有的表都包含外键,这就是我在 mariadb 中得到 errno: 150“外键约束不正确形成”的原因。

【问题讨论】:

  • 尝试分别运行每一个。然后,您可以将错误隔离到给定的创建语句并处理格式错误的 DDL 语法。
  • 这只是发布的方式,还是引用的约束名称使用了错误的引号?
  • 引用的约束名称不是问题

标签: sql foreign-keys mariadb


【解决方案1】:

您必须以正确的顺序声明表以避免错误 150。

或者直到CREATEing所有表之后才添加(通过ALTER TABLE)FK。

【讨论】:

  • 在创建表后添加外键工作,谢谢
猜你喜欢
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 2011-01-31
  • 2019-05-12
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多