我想从学校表中删除一条记录,而不影响部门名称的外键。我试过了,但我收到了这条消息:
“无法删除或更新父行:外键约束失败 (
arusms
.department
, CONSTRAINTdepartment_ibfk_1
FOREIGN KEY (school_name
) REFERENCESschool
(school_name
) ON UPDATE CASCADE)”
我想从学校表中删除一条记录,而不影响部门名称的外键。我试过了,但我收到了这条消息:
“无法删除或更新父行:外键约束失败 (
arusms
.department
, CONSTRAINTdepartment_ibfk_1
FOREIGN 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
原来的学校。