2017-08-24 13 views
1

以下の表を参照してください。削除トリガーを使用して同じテーブルから行を削除する方法?

MY_TABLE

CREATE TABLE MY_TABLE (COL_1 VARCHAR, COL_2 VARCHAR); 

私は、次のトリガーを作成しました。行が削除されようとするたびに

CREATE TRIGGER IF NOT EXIST MY_TRIGGER BEFORE DELETE ON MY_TABLE FOR EACH ROW BEGIN DELETE FROM MY_TABLE WHERE COL_2=currentrow.COL_1 

MY_TRIGGERがトリガされます。私が望むのは、その後、条件が真である同じテーブル内のいくつかの他の行を削​​除することです。

  1. がどのように仮想的なcurrentrowとそのカラムの値にアクセスすることができます

    私は2つの質問がありますか?

  2. trigger-run-delete-queryに対してトリガーが実行されますか?

答えて

1

あなたはoldを使用してAFTER TRIGGERを使用して削除された列を参照することができます:

CREATE TABLE MY_TABLE (COL_1 VARCHAR, COL_2 VARCHAR); 
INSERT INTO My_Table VALUES (1,1), (1,2),(2,1),(2,2); 

CREATE TRIGGER MY_TRIGGER 
AFTER DELETE ON MY_TABLE 
FOR EACH ROW 
BEGIN 
    DELETE FROM MY_TABLE 
    WHERE COL_2=old.COL_1; 
END 

DELETE FROM My_TABLE WHERE col_1 = 1; 

SELECT * FROM My_Table; 
-- 2 2 

DBFiddle Demo

よりWHEN句とトリガーアクションの両方

CREATE TRIGGERにの要素にアクセスできる 形式の「NEW.column-name」および「OLD.column-name」の参照を使用して、行が挿入、削除または更新されます。ここで、column-nameは、トリガーが関連付けられている表の列の名前です( )。と。 OLDとNEWの参照は次のように彼らは、関連する のイベントのトリガでのみ使用することができる。

INSERT NEWリファレンス有効

UPDATE NEWとOLD参照が有効な

されているOLDの参照を削除します有効である

+0

これは、「BEFORE」「TRIGGER」で古いものの代用品がないと言いますか?また、あなたは私の2番目の質問に答えていません。 – Abbas

+0

あなたは 'old'のドキュメントへのリンクを共有できますか? – Abbas

+0

@Abbasはい、BEFORE TRIGGERを使用できます – lad2025

関連する問題