use*_*579 5 mysql foreign-key constraint insert
我是一名学生,现在我遇到了一个我自己无法解决的问题(在互联网上搜索后)。
\n我不会给出我的 \xc2\xabhomework\xc2\xbb 因为我想了解我在做什么,但我会使用一个例子。
\n我有以下图表:\n
以及以下内容:
\nEmployee( ID
,DepartamentID,Floor)
\n外键( DepartamentID
, Floor
) 引用Departament(DepartamentID,Floor)
部门( DepartamentID
, Floor
, 话务员)
\n外键话务员引用 Employee(ID)
因此,根据本指南,我的实际 SQL 代码是:
\nCREATE 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我认为,通过这种方式,我可以完成所给信息所述的必须完成的任务,但是当我尝试插入如下数据时:
\nINSERT INTO Employee (ID, DepartamentID,Floor) VALUES (\'123456789-Z\', \'IT\', \'roof\');\n
Run Code Online (Sandbox Code Playgroud)\n或者
INSERT INTO Departament (DepartamentID, Floor, Attendant) VALUES (\'IT\', \'roof\', \'123456789-Z\');\n
Run Code Online (Sandbox Code Playgroud)\n我收到以下消息:
\n经过搜索和搜索,我意识到不可能将数据插入到需要来自另一个表的数据的表中,并且另一个表是空的。
\n我以为我可以在插入之前执行alter table,但是老师想要一个create.sql文件和一个inserts.sql文件,分开,所以我不能这样做。
\n我需要找到一个解决方案来完成这个任务,stackexchange 是我最后的希望。
\n感谢所有阅读本文的人,非常感谢。
\nPD:抱歉,如果问题太长,我尽力解释它(英语不是我的母语),但如果我必须再次解释某些内容,我当然会的!
\n不确定我是否理解了这项任务,但这里有一些可供思考的替代模式:
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)
归档时间: |
|
查看次数: |
31110 次 |
最近记录: |