2

短的

我的表格结构看起来像这样

在此处输入图像描述

这是 Sql 语句

            $stmt = $this->db->prepare("DELETE FROM chapters WHERE (subject_id=? AND id = ?)") or die($this->db->error());
            $stmt->bind_param("ii", $subject_id, $node);
            $stmt->execute();
            $stmt = $this->db->prepare("DELETE FROM sections WHERE (subject_id=? AND chapter_id=? )") or die($this->db->error());
            $stmt->bind_param("ii", $subject_id, $node);
            $stmt->execute();
            $stmt = $this->db->prepare("DELETE FROM paragraphs WHERE (subject_id=? AND chapter_id=?)") or die($this->db->error());
            $stmt->bind_param("ii", $subject_id, $node);
            $stmt->execute();

所以我想做的是,merge把这3条语句合二为一,优化服务器负载。

详细的

例如,如果我想从chapters表中删除 id=1 的行,那么还要从另外 2 个表中删除:sectionsparagraphs通过 2 个参数:$node$subject_id(当然,如果有这些参数的行。我的意思是必须加入防止任何错误)。

问题是..

那可能吗?我不知道,sql语句必须是什么样子。有什么建议么?

4

2 回答 2

6

如果您已经设置了外键约束,ON DELETE CASCADE那么您只需要删除父行。然后 MySQL 将自动删除子行。

于 2012-05-03T19:49:50.843 回答
4

我没试过,但你可以尝试多表删除:

http://dev.mysql.com/doc/refman/5.6/en/delete.html#id933512

    删除章节、章节、段落
    从章节
    在sections.subject_id = $subject_id AND section.chapter_id = $node 上左连接部分
    左连接段落 paras.subject_id = $subject_id AND paragraphs.chapter_id = $node
    在哪里 chapters.subject_id = $subject_id AND chapters.id = $node

我不确定使用左连接是否真的比使用 3 个单独的删除更快。

于 2012-05-03T20:12:52.687 回答