我在使用DB2时遇到以下问题:我需要更改列名(列“ A”),但问题是列A具有PK约束和FK约束。因此,我需要先删除此约束,更改列名,然后再次创建约束。但是我记得有一次教授告诉我,您不能在已经具有值的列中创建外键。是真的吗?
这是我的脚本:
ALTER TABLE TARGET_TABLE
DROP PRIMARY KEY PK_A CASCADE;
ALTER TABLE TARGET_TABLE
RENAME COLUMN A TO B;
alter table TARGET_TABLE
add CONSTRAINT PK_B PRIMARY KEY( B);
alter table TARGET_TABLE CONSTRAINT FK_B FOREIGN KEY( B) REFERENCES OTHER_TABLE(C);
提前感谢。
您可以在已经具有值的列上创建外键。唯一的限制是这些值必须对您定义的FK有效。
如果没有,您将得到一个错误,例如
SQL0667N The FOREIGN KEY "I..." cannot be created because the table contains
rows with foreign key values that cannot be found in the parent key of the
parent table. SQLSTATE=23520