如何将数据插入到相互引用的表中?(MySQL)

use*_*579 5 mysql foreign-key constraint insert

我是一名学生,现在我遇到了一个我自己无法解决的问题(在互联网上搜索后)。

\n

我不会给出我的 \xc2\xabhomework\xc2\xbb 因为我想了解我在做什么,但我会使用一个例子。

\n

我有以下图表:\n在此输入图像描述

\n

以及以下内容:

\n

Employee( ID,DepartamentID,Floor)
\n外键( DepartamentID, Floor) 引用Departament(DepartamentID,Floor)

\n

部门( DepartamentID, Floor, 话务员)
\n外键话务员引用 Employee(ID)

\n
\n

因此,根据本指南,我的实际 SQL 代码是:

\n
CREATE TABLE Employee(\n    ID varchar(25) not null,\n    DepartamentID varchar(25),\n    Floor varchar(25),\n    CONSTRAINT pk_ID PRIMARY KEY (ID),\n) ENGINE=InnoDB;\n\nCREATE TABLE Departament(\n    DepartamentID varchar(25) not null,\n    Floor varchar(25) not null,\n    Attendant varchar(25) not null,\n    CONSTRAINT pk_dept PRIMARY KEY (DepartamentID, Floor),\n    CONSTRAINT fk_att FOREIGN KEY (Attendant) REFERENCES Employee (ID),\n) ENGINE=InnoDB;\n\nALTER TABLE Employee\nADD CONSTRAINT fk_dept FOREIGN KEY (DepartamentID, Floor) REFERENCES Departament (DepartamentID, Floor);\n
Run Code Online (Sandbox Code Playgroud)\n
\n

我认为,通过这种方式,我可以完成所给信息所述的必须完成的任务,但是当我尝试插入如下数据时:

\n
INSERT INTO Employee (ID, DepartamentID,Floor) VALUES (\'123456789-Z\', \'IT\', \'roof\');\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
INSERT INTO Departament (DepartamentID, Floor, Attendant) VALUES (\'IT\', \'roof\', \'123456789-Z\');\n
Run Code Online (Sandbox Code Playgroud)\n

我收到以下消息:

\n

1452 - 无法添加或更新子行:外键约束失败

\n

经过搜索和搜索,我意识到不可能将数据插入到需要来自另一个表的数据的表中,并且另一个表是空的。

\n

我以为我可以在插入之前执行alter table,但是老师想要一个create.sql文件和一个inserts.sql文件,分开,所以我不能这样做。

\n

我需要找到一个解决方案来完成这个任务,stackexchange 是我最后的希望。

\n

感谢所有阅读本文的人,非常感谢。

\n

PD:抱歉,如果问题太长,我尽力解释它(英语不是我的母语),但如果我必须再次解释某些内容,我当然会的!

\n

Len*_*art 3

不确定我是否理解了这项任务,但这里有一些可供思考的替代模式:

CREATE TABLE Departament(
    DepartamentID varchar(25) not null,
    Floor varchar(25) not null,
        CONSTRAINT pk_dept PRIMARY KEY (DepartamentID, Floor),
) ENGINE=InnoDB;


CREATE TABLE Employee(
    ID varchar(25) not null,
    DepartamentID varchar(25),
    Floor varchar(25),
        CONSTRAINT pk_ID PRIMARY KEY (ID),
        CONSTRAINT fk_dept FOREIGN KEY (DepartamentID, Floor) 
            REFERENCES Departament (DepartamentID, Floor)
) ENGINE=InnoDB;

CREATE TABLE Attendant (
    ID varchar(25) not null,
    DepartamentID varchar(25) not null,
    Floor varchar(25) not null,

    CONSTRAINT pk_attendent PRIMARY KEY (ID),
    CONSTRAINT ak_attendent UNIQUE (DepartamentID, Floor),
    CONSTRAINT fk_... REFERENCES Employee ...,
    CONSTRAINT fk_... REFERENCES Department ...,
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)