2012-08-05 14 views
14

範囲:2つのテーブル。新しい顧客が作成されると、2番目のテーブルに格納されている情報が表示されます(これは、トリガーも使用して実行され、期待通りに機能します)。次に、私のテーブル構造と関係の例を示します。MySQLトリガー:テーブルからの削除

表1->

+-----+---------+-----+ 
+ id + name + val + 
+=====+=========+=====+ 
+ 37 + george + x + 
+-----+---------+-----+ 
+ 38 + sally + y + 
+-----+---------+-----+ 

表2から

+----+-----+----------+ 
+ id + pid + name + 
+----+-----+----------+ 
+ 1 + 37 + george + 
+----+-----+----------+ 
+ 2 + 38 + sally + 
+----+-----+----------+ 

管理patron_info>は、常連客を管理することができます。彼らが客を取り除くことを選択すると、その客はテーブル1patronsから削除されます。この時点では、テーブル2patron_infoには何も起こりません。

テーブル1にアイテムが削除されているときに、単にテーブル2から削除するトリガーを作成しようとしています。ここでは最初

が...私が試したものだ、私はその後、私はその後、トリガーを作成しよう

DROP TRIGGER IF EXISTS log_patron_delete; 

...(単に空気をクリアする)が存在する場合、トリガーをドロップしてみてください。 ..

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons 
FOR EACH ROW 
BEGIN 
DELETE FROM patron_info 
    WHERE patron_info.pid = patrons.id 
END 

この時点で、構文エラー1046: Check syntax near END on line 6が表示されます。この時点でどのようなエラーが発生しているのか分かりません。私はいくつかのバリエーションを試しました。また、ここで区切り文字を使用する必要がありますか?

誰でも私の正気を回復するのに役立つことができますか?

+0

ここで何が必要ですか?本当の質問は何ですか? –

+0

@vivek_jonam削除トリガーは起動しません。それは私に6行目の 'END'にsytnaxエラーを与えます。また、これを 'DELIMETER $$'で囲みますか? – Ohgodwhy

+1

@Ohgodwhy:memcacheに関する質問のみ - 私はそれを追加した後にリンクされていました。私がそれをする前は、「関連」にはいませんでした。 – zerkms

答えて

33

トリガーコードに誤りがあると思います。

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons 
FOR EACH ROW 
BEGIN 
DELETE FROM patron_info 
    WHERE patron_info.pid = old.id; 
END 

いけない:あなたが削除された守護IDですべての行を削除したいと 、あなたは

が新しいトリガとしてこれを試してみてください(そうでなければ、それは他のIDを削除します)old.id使用する必要があります";"を忘れる削除クエリで。 また、コンソールウィンドウにTRIGGERコードを入力する場合は、区切り記号も使用してください。

外部キー patron_infoを.pidにDELETE CASCADE ON設定されていないのはなぜ
+2

Maaaaaaaaaaaaaaaaaan。すべてがWHERE句のセミコロンになってしまいました。私はそんなに馬鹿だ。そのvivekをありがとう、それは感謝しています! – Ohgodwhy

+1

なぜ1つのステートメントに対して複合ステートメントブロックを使用するのですか? [CREATE TRIGGER構文](http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html)にはこれを行う必要はありません。 – Air

+0

";"を忘れないでください - BOLDにする必要があります – Ulterior

-1
create trigger doct_trigger 
after delete on doctor 
for each row 
delete from patient where patient.PrimaryDoctor_SSN=doctor.SSN ; 
5

+0

私はこれを読むと同じと思います... –

関連する問題