哪个先被删除了?主键还是外键?

时间:2016-01-13 15:22:46

标签: mysql sql database

当我们删除其他表中的外键主键时,会先删除它吗?第一个表中的主键或另一个表中的外键?我在面试中被问到这个问题。请提供一些理由回答:)

3 个答案:

答案 0 :(得分:4)

通常,您需要在删除主键之前删除外键引用。否则,外键约束将无效。

我猜可能这是面试官正在寻找的答案。

但实际上,答案是“同时”。实现此目的的常规方法是使用级联删除外键引用。删除都将在同一个事务中发生(至少在大多数数据库中),因此它们在提交之前不会生效。

如果您是手动执行此操作,通常会执行以下操作:

  • 删除外键约束。
  • 重新设置外键引用列中的值(通常为NULL)。
  • 删除主键表中的相应行。

答案 1 :(得分:1)

对我而言,看起来像一个棘手的问题。

我的答案都不是,除非您定义 DELETE CASCADE 约束

,否则会收到错误

在那种情况下,行首先将删除PK。

答案 2 :(得分:0)

在FK记录消失之前,无法删除PK记录。这是具有这种关系的定义的一部分,也是建立FK关系的主要原因之一。原因是您不希望孤立的子记录不再具有父级,因此没有意义。这是数据完整性问题。

如果您尝试在不先删除子记录的情况下删除PK,数据库将会出错。级联删除可以通过在后台首先删除它们来隐藏它,但这在很多时候都是非常糟糕的事情,应该避免。您不希望willy nilly删除子记录,有很多时候,子记录的存在告诉您不应删除父记录。