从表 2 中的外键约束中删除表 1 中确实具有主键的记录

Posted

技术标签:

【中文标题】从表 2 中的外键约束中删除表 1 中确实具有主键的记录【英文标题】:delete records from foreign-key constraint in table2 which does have primary key in table1 【发布时间】:2015-01-21 17:44:22 【问题描述】:

假设 Table1 有

wordid col2
 1     x
 2     y
 3     x

现在 table2 有

wordid col3
  1    a
  2    b
  3    c
  4    d

“table1”表中的“wordid”列是“table1”表中的PRIMARY KEY。

“table2”表中的“wordid”列是“table2”表中的FOREIGN KEY。

我想删除“table2”中未绑定任何约束的所有记录。 (此处需要删除wordid为“4”的行)

【问题讨论】:

table2 中的 wordid=4 不能作为 FK。 我在 table1 中有一条记录 wordid=4 已删除。现在我想从 table2 中删除记录。 可以使用级联删除。 那也会删除 wordid=1,2,3 .. 这不是动机 我需要找到未绑定到 frng 键约束的行并将它们从 table2 中删除 【参考方案1】:

我假设您尚未设置 FK 或未强制执行完整性?

DELETE FROM table2 WHERE wordid NOT IN
( SELECT wordid FROM table1 )

就像 cmets 中建议的哈姆雷特一样,您应该在 FK 中使用 ON DELETE CASCADE 并强制执行 FK 完整性。

【讨论】:

@KaNcH 你的外键有问题。你是倒着做的吗?根据您的示例,看起来您在 table1 上有引用 table2 的外键,它应该是相反的。

以上是关于从表 2 中的外键约束中删除表 1 中确实具有主键的记录的主要内容,如果未能解决你的问题,请参考以下文章

主键和外键约束(主表与从表)

11.21

hibernate表关系

数据库中的外键约束

MySQL基础之 主键外键设置

oracle中 主键和外键是啥意思?啥地方采用呢?