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つのステートメントを1つにして、サーバーの負荷を最適化することです。

詳細

たとえば、テーブルから id=1 の行を削除したい場合は、さらにchapters2 つのテーブルからも削除します:エラーを防ぎます)。sectionsparagraphs$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

    章、セクション、段落を削除する
    チャプターから
    section.subject_id = $subject_id ANDsections.chapter_id = $node の LEFT JOIN セクション
    paragraphs.subject_id = $subject_id AND paragraphs.chapter_id = $node の LEFT JOIN 段落
    WHERE chapters.subject_id = $subject_id AND chapters.id = $node

左結合を使用する方が、3 つの個別の削除を使用するよりも本当に速いかどうかはわかりません。

于 2012-05-03T20:12:52.687 に答える