删除不影响外键约束到其他表的主键
我想删除学校表中的记录,而不影响部门名称的外键。我试过,但我得到这个消息:删除不影响外键约束到其他表的主键
“无法删除或更新父行,外键约束失败 (
arusms
department
,约束department_ibfk_1
FOREIGN KEY (school_name
)参考文献school
(school_name
)ON UPDATE 。 CASCADE)“
我不知道你为什么要这样做。如果你删除学校,该部门将成为孤儿。这就是为了强制引用完整性而将外键放在首位。如果您希望部门保留并能够执行此操作,则需要更改外键以包含ON DELETE SET NULL。否则,您将必须删除约束,执行删除并重新创建约束。
如果删除约束并执行删除,那么您将无法重新创建约束:) – 2012-04-20 06:59:06
@ypercube:如果将foreign_key_checks设置为0,则可以。实际上,这比删除它容易。将foreign_key_checks设置为0,删除记录,将foreign_key_checks设置为1.这是一个肮脏的黑客攻击,但我不明白首先想做这件事的原因。 – mdoyle 2012-04-20 14:21:26
非常感谢您的出色答案 – 2012-04-21 13:22:21
拥有外键的全部目的是保持数据一致。就你而言,这意味着对于每个department
,必须存在对应的school
记录。如果你是一所学校,所有相应的部门也应该删除,或者至少他们的school
参考文献必须是NULL
ed。
如果你不需要这种强制执行,DROP
的外键。
另外,如果你只是想重新分配一个部门到另一所学校,首先要做的是,然后才是原来的学校DELETE
。
非常感谢您的好回答 – 2012-04-21 13:22:31
@AntwenySawe考虑将其中一个答案标记为已接受。 – 2012-04-21 17:50:28
您的错误信息隐藏了真正的原因。
(
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
行动。
非常感谢您的回答 – 2012-04-21 13:22:48
请问您可以展示您的数据库是如何设置的? – simchona 2012-04-19 16:29:30
我认为这可能是不可能的。你为什么需要这样做? – 2012-04-19 16:29:44
如果一个部门是学校的一部分,并且您删除了该学校,这意味着该部门也不在了。你所问的没有意义。 – 2012-04-19 16:31:37