Mysql 如何向下一行中创建的表添加带有引用的外键

Mysql 如何向下一行中创建的表添加带有引用的外键,mysql,sql,Mysql,Sql,“无法添加外键约束” 我在线使用此编辑器当两个表相互引用时,您可以使用更改表: CREATE TABLE Departament (d_nume varchar(30), d_nr int, manager varchar(30), PRIMARY KEY(d_nr), FOREIGN KEY (manager) REFERENCES Angajat(nume)); CREATE TABLE Angajat (nume varchar(30), prenume varchar(30), c

“无法添加外键约束”


我在线使用此编辑器

当两个表相互引用时,您可以使用
更改表

CREATE TABLE Departament
(d_nume varchar(30), d_nr int, manager varchar(30), PRIMARY KEY(d_nr), 
FOREIGN KEY (manager) REFERENCES Angajat(nume));


CREATE TABLE Angajat
(nume varchar(30), prenume varchar(30), cnp char(13), d_nr int, PRIMARY KEY(cnp), 
FOREIGN KEY(d_nr) REFERENCES Departament(d_nr));

外键引用也应该指向主键,我通常将主键作为表中的第一列。是SQL FIDLE。

当两个表相互引用时,您可以使用
alter table

CREATE TABLE Departament
(d_nume varchar(30), d_nr int, manager varchar(30), PRIMARY KEY(d_nr), 
FOREIGN KEY (manager) REFERENCES Angajat(nume));


CREATE TABLE Angajat
(nume varchar(30), prenume varchar(30), cnp char(13), d_nr int, PRIMARY KEY(cnp), 
FOREIGN KEY(d_nr) REFERENCES Departament(d_nr));

外键引用也应该指向主键,我通常将主键作为表中的第一列。是SQL FIDLE。

在添加外键约束之前必须创建一个表。在添加外键约束之前必须创建一个表。这不是一个可怕的循环引用吗?@p.Salmon。一点也不。一个部门有一个作为雇员的经理。员工在一个部门工作。这似乎是合理的。@Gordon Linoff这是合理的,但你不能在插入angajat之前插入department,也不能在插入department之前插入department。@GabrielPinţă。看看SQL小提琴。代码有效。@P.Salmon:Gordon代码中的外键没有
notnull
约束。因此,您可以使用外键的
NULL
值插入两个表中,然后更新外键。这不是一个可怕的循环引用吗?@P.Salmon。一点也不。一个部门有一个作为雇员的经理。员工在一个部门工作。这似乎是合理的。@Gordon Linoff这是合理的,但你不能在插入angajat之前插入department,也不能在插入department之前插入department。@GabrielPinţă。看看SQL小提琴。代码有效。@P.Salmon:Gordon代码中的外键没有
notnull
约束。因此,您可以使用外键的
NULL
值插入到两个表中,然后更新外键。