Mysql
如何將數據插入到相互引用的表中?(MySQL)
我是一名學生,現在我有一個我自己無法解決的問題(在網際網路上搜尋後)。
我不會給我的«家庭作業»,因為我想了解我在做什麼,但我會舉一個例子。
我有下圖:
以及以下內容:
Employee(
ID
,DepartamentID,Floor)外鍵(
DepartamentID
,Floor
) 引用 Departament(DepartamentID,Floor)Department(
DepartamentID
,Floor
, Attendant)外鍵 話務員引用 Employee(ID)
所以有了這個指導方針,我的實際 SQL 程式碼是:
CREATE TABLE Employee( ID varchar(25) not null, DepartamentID varchar(25), Floor varchar(25), CONSTRAINT pk_ID PRIMARY KEY (ID), ) ENGINE=InnoDB; CREATE TABLE Departament( DepartamentID varchar(25) not null, Floor varchar(25) not null, Attendant varchar(25) not null, CONSTRAINT pk_dept PRIMARY KEY (DepartamentID, Floor), CONSTRAINT fk_att FOREIGN KEY (Attendant) REFERENCES Employee (ID), ) ENGINE=InnoDB; ALTER TABLE Employee ADD CONSTRAINT fk_dept FOREIGN KEY (DepartamentID, Floor) REFERENCES Departament (DepartamentID, Floor);
我認為,通過這種方式,我完成了所提供的資訊所說的我必須完成的事情,但是當我嘗試插入如下數據時:
INSERT INTO Employee (ID, DepartamentID,Floor) VALUES ('123456789-Z', 'IT', 'roof');
要麼
INSERT INTO Departament (DepartamentID, Floor, Attendant) VALUES ('IT', 'roof', '123456789-Z');
我收到以下消息:
1452 - 無法添加或更新子行:外鍵約束失敗
經過搜尋和搜尋,我意識到不可能將數據插入到需要來自另一個表的數據並且另一個表為空的表中。
我以為我可以在插入之前做alter table,但老師想要一個create.sql文件和一個inserts.sql文件,分開,所以我不能這樣做。
我需要找到一個解決方案來完成這個,stackexchange 是我最後的希望。
感謝所有閱讀本文的人,非常感謝。
PD:對不起,如果問題太長,我會盡力解釋(英語不是我的母語),但如果我必須再次解釋,我一定會的!
不確定我是否理解這項任務,但這裡有一些可供思考的替代模式:
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;