5

我想从学校表中删除一条记录,而不影响部门名称的外键。我试过了,但我收到了这条消息:

“无法删除或更新父行:外键约束失败 ( arusms. department, CONSTRAINT department_ibfk_1FOREIGN KEY ( school_name) REFERENCES school( school_name) ON UPDATE CASCADE)”

4

3 回答 3

3

我不确定你为什么要这样做。如果您删除学校,该部门将成为孤儿。这就是首先使用外键来强制引用完整性的重点。如果您希望部门保留并能够执行此操作,则需要更改外键以包含 ON DELETE SET NULL。否则,您将不得不删除约束、执行删除并重新创建约束。

于 2012-04-19T16:35:35.523 回答
2

您的错误消息隐藏了真正的原因。

(
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操作。
于 2012-04-20T06:55:06.990 回答
1

拥有外键的全部目的是保持数据一致。在您的情况下,这意味着对于每个department,都必须存在相应的school记录。如果你DELETE是一所学校,所有相应的部门也应该被删除,或者至少他们的school引用必须被NULL编辑。

如果你不需要这种强制,DROP外键。

或者,如果您只想将一个部门重新分配到另一所学校,请先执行此操作,然后再分配到DELETE原来的学校。

于 2012-04-19T16:36:21.970 回答