SQL,通过ALTER TABLE在1语句

时间:2017-05-28 09:42:02

标签: mysql sql database-design alter

我希望按列扩展已创建的表,但该列是外键。这必须在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表有条目可能会出现问题,但在我们的情况下,表格为空。

有什么建议吗?

编辑: SOLUTION:删除约束“NOT NULL”。 谢谢@MilanŠ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`);

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

1 个答案:

答案 0 :(得分:0)

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