2017-02-09 3 views
0

私は2つのテーブルを持っています。 1はゴルフコース、もう1つはコースのホールです。テーブルgolf_coursesには5レコード(5ゴルフコース)があります。表golf_holesには、5つのコース(90レコード)ごとに18のレコードがあります。私は、コースを削除するときに18ホールを削除するトリガーを作成しました。しかし、私はそれを実行する方法を知らない。ここで2つのテーブルから削除するトリガを作成しました。トリガーを実行するにはどうすればよいですか?

は私のトリガーです:

Delimiter $$ 
CREATE TRIGGER remove_course 
AFTER DELETE ON golf_courses 
FOR EACH ROW 
BEGIN 
    DELETE FROM golf_holes 
     WHERE golf_holes.golf_id = old.golf_id; 
END $$ 
DELIMITER ; 

は、どのように私はこのトリガーを呼び出す/実行するのですか?

+0

申し訳ありませんが、周りに包まれたラインを実現didntのがあるかもしれないので、私は – PSDockery

+0

... before deleteを実行するための区切り文字を、それを設定したい$$ CREATE TRIGGER remove_course after after golf_courses各行ごとに削除するgolf_holes WHERE golf_holes.golf_id = old.golf_id; END $$ DELIMITER; – PSDockery

+0

「トリガ」という言葉は、何かが起こったことを示唆しているからです。それはあなたがそれを実行しないことを意味します。プログラムを実行します(したがって、ストアドプロシージャという言葉は、手動で呼び出します)。トリガーは**トリガーされます**。あなたは 'AFTER DELETE'を書いたボディーを書いたことさえあります - それは削除が起こった後に**トリガーされる**ことを意味します。イベントは時間コンポーネントが満たされたときなどに実行されます。私はあなたに何が混乱しているのかはわかりませんが、トリガーが必要で、それを作成する方法を知っていたので、 –

答えて

0

トリガーは自動的に実行されるため、指定したテーブルで指定されたアクションを実行すると実行されます。この場合、golf_coursesからDELETEを実行します。

+0

OK、それは動作しません。私は入力します:DELETE FROM golf_coursesどこgolf_id = 1;最初のテーブルからゴルフコースを削除しますが、2番目のテーブルの18個の穴は削除しません。 – PSDockery

+0

golf_courses.golf_idを参照するgolf_holes.golf_idに外部キー制約がありますか?もしそうなら、制約は、トリガーが実行される前にそれらの1をヌルに変更する 'ON DELETE SET NULL'節を持つことができます。これはAlfabravoの答えが代わりに 'BEFORE DELETE'トリガーを使用することを示唆した理由です。 – Uueerdo

0

golf_coursesの行に対して、削除操作ごとに自動的に呼び出されます。関連する行との効果上の制約子テーブルを持っているテーブルの行を削除するからあなたを保つ(golf_holes

関連する問題