删除主键而不影响外键约束到另一个表

时间:2012-04-19 16:27:11

标签: mysql

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

  

“无法删除或更新父行:外键约束失败   (arusmsdepartment,CONSTRAINT department_ibfk_1 FOREIGN KEY   (school_name)参考schoolschool_name)ON UPDATE   CASCADE)“

3 个答案:

答案 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操作。