【发布时间】:2021-02-25 18:09:54
【问题描述】:
我有两个表:STATE 和 COUNTY,COUNTY 的主键是州和县的组合,它的外键是州。
State 的 COUNTY 表中存在 STATE 表中不存在的条目,因此我想将这些外键设置为 null。我该怎么做?通过设置外键为空,我应该这样做吗?
【问题讨论】:
-
为什么?您最终会得到一个不低于州的县吗?也许告诉我们您想要实现的目标,然后我们可能会提出更好的方法
我有两个表:STATE 和 COUNTY,COUNTY 的主键是州和县的组合,它的外键是州。
State 的 COUNTY 表中存在 STATE 表中不存在的条目,因此我想将这些外键设置为 null。我该怎么做?通过设置外键为空,我应该这样做吗?
【问题讨论】:
在 COUNTY 状态表中有条目不存在于 状态表
如果是这种情况,则表 County 中的列 State不是引用表 State 中的列 State 的外键。
如果要将列定义为外键,则必须这样做:
ALTER TABLE County ADD CONSTRAINT fk_state FOREIGN KEY (State) REFERENCES State(State);
如果存在此外键约束,您将不会有不存在州的县,因为它们将被约束拒绝。
所以,更新表County:
UPDATE County c
LEFT JOIN State s ON s.State = c.State
SET c.State = NULL
WHERE s.State IS NULL
然后添加外键约束,这样您就不会在表中再次出现不存在的状态。
查看简化的demo。
【讨论】: