当前位置: 首页 > 面试题库 >

删除外键未引用的行

蒯慈
2023-03-14
问题内容

这与这个问题有些相关:

我有一个带有主键的表,并且我有几个表引用该主键(使用外键)。我需要从该表中删除行,在该表中其他任何表(以及其他一些约束)中都未引用主键。

例如:

Group
groupid | groupname
    1   |    'group 1'
    2   |    'group 3'
    3   |    'group 2'
    ... |    '...'

Table1
tableid | groupid | data
    1   |    3    |    ...
    ... |    ...  |    ...

Table2
tableid | groupid | data
    1   |    2    |    ...
    ... |    ...  |    ...

等等。组中的某些行在任何表中均未引用,因此我需要删除这些行。除此之外,我需要知道如何查找所有在Group中引用给定行的表/行。

我知道我可以查询每个表并检查groupid,但是由于它们是外键,所以我想有一种更好的方法。

顺便说一下,这是使用Postgresql 8.3。


问题答案:

从本质上讲,SQL服务器不会为约束保留双向信息,因此,唯一的选择是执行删除行时服务器在内部执行的操作:检查其他所有表。

如果(并且首先要确保)约束是简单的检查并且不包含任何“在删除级联时”类型的语句,则可以尝试从组表中删除所有内容。因此,任何删除的行都将没有引用它。否则,您将被Quassnoi的答案所困扰。



 类似资料:
  • 问题内容: 我有一个MySQL表,其定义如下: 目前表格中只有1列: 问题是没有删除约束就无法删除该行的方法。 由于ThreadId列的定义不为null,因此也无法将ThreadId临时设置为其他值以删除该行。有没有一种方法可以删除行而不更改表的定义或删除整个表? 问题答案: 您可以使用以下查询临时禁用外键约束:

  • 我正在尝试运行一个Spring Boot应用程序,但我有这个问题,我不知道原因。请注意,我想使用的是Mysql,而不是H2数据库 我的受抚养人

  • 问题内容: 我有一个表X,该表具有一个自动递增的ID列作为其主键。我还有其他表A,B,C和D,它们补充了表X中的信息。每个表都必须包含一个引用表X中ID的列。我已经这样做了,并且在我的代码(Java)中,将每个条目的ID返回到表X并在插入其他表时使用该ID的方法。一切都很好。 现在,建议我将表A,B,C和D上的ID列分配为FOREIGN KEYS,因为“这是正确的做法”。我做到了 现在,从表X中删

  • (警告:我不是MySQL专业人士,我使用工作台代替知道命令,所以我的问题可能很简单) 我试图重命名表(user)中的主键(userID),但MySQL不允许(错误号150)。经过一番挖掘,我似乎必须先删除外键,然后才能重命名主键。 因此,在Workbench中,我转到下一个表(问题)并选择alter table,然后转到外键选项卡。我在左侧窗口中选择唯一的外键(fk\u question\u us

  • 我想删除一个用户,所以我尝试了: 但很明显,它根本不起作用,因为它与其他表相连。我不能使用DROP,因为它是SQLite。我上网查了一下,什么也没有... 错误:错误

  • 问题内容: 我有一个表,该表的主键在其他几个表中使用,并且对其他表有几个外键。 问题是,当我尝试删除外键列之一(即locationIDX)时,它给了我一个错误。 “错误1025(HY000):重命名错误” 如何在没有出现此错误的情况下将列删除到上面的分配表中? 问题答案: 正如解释在这里,似乎外键约束必须由被丢弃 的约束名称 ,而不是索引名。语法为: