SQL,通过ALTER TABLE在1语句中添加一个外键的列

问题描述:

我想通过列扩展已经创建的表,但该列是外键。这必须发生在1个SQL语句中。 我知道比我可以使用ALTER TABLE操作来实现它,但有一个小的错误消息。SQL,通过ALTER TABLE在1语句中添加一个外键的列

现有表:

//relation, because table already exists 
Relation(A, B, C, D, E, F) 

//创建一个表F

CREATE TABLE `MyTable`(
`PK` INT(11) NOT NULL, 
`H` VARCHAR(30) NOT NULL, 
`I` INT NOT NULL, 
PRIMARY KEY(`PK`), 
FOREIGN KEY(`I`) REFERENCES `IT`(`I`) 
); 

尝试添加这是一个外键(在一个声明中的所有内容)列I:

ALTER TABLE `R` 
ADD COLUMN `PK` INT(11) NOT NULL, 
ADD CONSTRAINT FOREIGN KEY (`PK`) REFERENCES `MyTable`(`PK`); 

错误消息:

Cannot add or update a child row: a foreign key constraint fails. 

重要信息:我知道如果IT表具有条目,可能会出现问题,但在我们的情况下,表是空的。

有什么建议吗?编号: 解决方法:删除约束“NOT NULL”。 感谢@Milan斯威克

------------------------------------------- 

CREATE TABLE `MyTable`(
`PK` INT(11), 
`H` VARCHAR(30) NOT NULL, 
`I` INT NOT NULL, 
PRIMARY KEY(`PK`), 
FOREIGN KEY(`I`) REFERENCES `IT`(`I`) 
); 


ALTER TABLE `R` 
ADD COLUMN `PK` INT(11), 
ADD CONSTRAINT FOREIGN KEY (`PK`) REFERENCES `MyTable`(`PK`); 

-------------------------------------- 

不知道,但尝试使列可空第一。在填充实际值后,将其更改为不可空。

+0

有时候很容易。首先解决问题。 – normalUser221