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

现有表:

//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”。
谢谢@米兰Švec

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

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`);

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

最佳答案

不确定,但是请尝试首先使该列可为空。在填充实数值之后,将其更改为不可为空。

关于mysql - SQL,通过1条语句中的ALTER TABLE添加作为外键的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44225872/

10-10 03:33