从表 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 中确实具有主键的记录的主要内容,如果未能解决你的问题,请参考以下文章