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