我想从学校表中删除记录而不影响部门名称的外键。我尝试了但是我收到了这条消息:
“无法删除或更新父行:外键约束失败 (
arusms
。department
,CONSTRAINTdepartment_ibfk_1
FOREIGN KEY (school_name
)参考school
(school_name
)ON UPDATE CASCADE)“
答案 0 :(得分:2)
我不确定你为什么要那样做。如果删除学校,该部门将成为孤儿。这就是首先拥有外键,以强制执行参照完整性。如果您希望部门保留并且能够执行此操作,则需要更改外键以包括ON DELETE SET NULL。否则,您将不得不删除约束,执行删除,并重新创建约束。
答案 1 :(得分:1)
拥有外键的全部目的是保持数据的一致性。在您的情况下,这意味着对于每个department
,必须存在相应的school
记录。如果您DELETE
某所学校,也应删除所有相应的部门,或者至少其school
引用必须为NULL
。
如果您不需要这种强制执行,DROP
外键。
或者,如果您只想将某个部门重新分配到另一所学校,请先这样做,然后再DELETE
原来的学校。
答案 2 :(得分:0)
您的错误消息隐藏了真正的原因。
(
arusms.department,
CONSTRAINT department_ibfk_1
FOREIGN KEY (school_name)
REFERENCES school (school_name)
ON UPDATE CASCADE
)
创建外键constarint时,省略了ON DELETE
部分。 MySQL使用了默认操作,即 ON DELETE RESTRICT
。请参阅MySQL文档:FOREIGN KEY
Constraints
如果您希望能够删除没有级联效果的学校到相关部门,您可以
删除FK约束或
使列(department.school_name
)可以为空并更改约束以进行ON DELETE SET NULL
操作。
如果您希望能够删除学校并级联删除相关部门,您可以
ON DELETE CASCADE
操作。