1

私は2つのテーブルを持っています。テーブルとそのフィールドは次のとおりです。

articles
   id
   title
comments
   id
   content
   article_id

関係は一対多です(記事1<--->*コメント)

記事を削除すると、その記事のコメントもすべて削除されます。

これを行うためのトリガーSQLは何ですか?

4

2 に答える 2

2

InnoDB エンジンを使用している場合は、FK 制約を次のように定義するだけです。ON DELETE CASCADE

提案されたスキーマは次のようになります

CREATE TABLE articles
(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
  title VARCHAR(256)
);
CREATE TABLE comments
(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
  content VARCHAR(10), 
  article_id INT,
  FOREIGN KEY (article_id) 
    REFERENCES articles(id) ON DELETE CASCADE
);

次に、行を削除するとarticles

DELETE FROM articles WHERE id = 1;

からの対応するすべての行commentsが自動的に削除されます。

これがSQLFiddleのデモです


FK の実装を持たない MyISAM エンジンを使用している場合、または何らかの理由でトリガーを介して強制したいAFTER DELETE場合は、このようなイベントを使用します。

CREATE TRIGGER tg_ad_articles
AFTER DELETE ON articles
FOR EACH ROW
  DELETE FROM comments 
   WHERE article_id = OLD.id;

注:これは 1 つのステートメント トリガーであるため、ブロックを変更DELIMITERして使用する必要はありません。BEGIN...END

これがSQLFiddleのデモです

于 2013-09-03T03:04:07.767 に答える
0

これはテストされていません。(区切り文字を変更して db に追加します)。

CREATE TRIGGER `article_before_delete`  
   BEFORE DELETE ON `articles` 
    FOR EACH ROW  
   BEGIN  
    DELETE FROM `comments` where `article_id` = OLD.id;
   END 

同様の質問 への回答はこちら MySQL の 2 つのテーブルから DELETE するトリガーが必要です

于 2013-09-03T00:30:28.550 に答える