删除数据最有效的方法

时间:2012-12-16 18:23:36

标签: mysql

我正在研究论坛系统,我需要删除特定论坛的所有主题和帖子。

有一个posts表,其中包含所有帖子。每个帖子都有topic_id字段,该字段是其所属主题的ID。主题位于topics表中,每个主题都有forum_id字段,该字段是其所属论坛的ID。

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

2 个答案:

答案 0 :(得分:3)

首先,我建议您仔细查看您的数据结构:如果您使用ON DELETE CASCADE风格的外键约束,您的子删除将自动为您完成 - 这只是其中一个你得到的好处。

如果由于某些原因您不能或不想使用此类限制,请首先查看如何选择相关主题和帖子。这应该会给你一个很好的开始。

在您的特定示例中,如

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]

应该这样做。

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

答案 1 :(得分:0)

此sql应删除与论坛相关的所有帖子1.主题仍将在数据库中,并且必须另外删除。 还没有测试过sql,试试吧:)

DELETE FROM
    posts
WHERE 
    topic_id
IN (
    SELECT 
        topic_id
    FROM
        topics
    WHERE
        forum_id = 1
)