Mysql 删除数据的最有效方法

Mysql 删除数据的最有效方法,mysql,Mysql,我在一个论坛系统上工作,我需要删除一个特定论坛的所有主题和帖子 有一个包含所有帖子的posts表。每个帖子都有topic\u id字段,该字段是帖子所属主题的id。主题位于topics表中,每个主题都有forum\u id字段,该字段是它所属论坛的id 因此,现在当我决定删除ID为1的论坛时,我将如何删除该论坛中的所有主题和帖子?此sql应删除与论坛1相关的所有帖子。这些主题仍将在数据库中,并且必须另外删除。 尚未测试sql,请尝试:) 首先,我建议您仔细检查一下您的数据结构:如果您在DELET

我在一个论坛系统上工作,我需要删除一个特定论坛的所有主题和帖子

有一个包含所有帖子的
posts
表。每个帖子都有
topic\u id
字段,该字段是帖子所属主题的id。主题位于
topics
表中,每个主题都有
forum\u id
字段,该字段是它所属论坛的id


因此,现在当我决定删除ID为
1
的论坛时,我将如何删除该论坛中的所有主题和帖子?

此sql应删除与论坛1相关的所有帖子。这些主题仍将在数据库中,并且必须另外删除。 尚未测试sql,请尝试:)


首先,我建议您仔细检查一下您的数据结构:如果您在DELETE CASCADEflavor上使用
的外键约束,您的子删除将自动完成—这只是您获得的优势之一

如果出于某些原因,你不能或不想使用这些限制,那么首先看看你将如何选择相关的主题和帖子。这会给你一个很好的开始

在你的例子中

DELETE FROM posts
WHERE topic_id IN (
     SELECT id FROM topics WHERE forum_id=[id-to-delete]
  )
然后

DELETE FROM topics WHERE forum_id=[id-to-delete]
我们应该做到这一点


请理解,我不建议这样做。使用数据一致性工具实现数据一致性。

编写一个SQL
DELETE
查询。是的,但该查询是什么样的?我能够编写简单的DELTE查询,但鉴于嵌套结构,这个查询看起来有点复杂……您不应该尝试在一个查询中从不同的表中删除。改为在事务中执行多次删除。如果您遇到问题,请发布您的查询并描述您的问题。您确定要完全删除此帖子吗?你不应该把你所有的帖子存档,或者当它们超过6个月的时候删除它们。你试过什么?你调查过这件事了吗?
DELETE FROM topics WHERE forum_id=[id-to-delete]