2017-09-24 23 views
0

mysqlトリガーに条件付きの更新を挿入することは可能ですか?特定のタイプの更新の後に何かをする必要がある場合、たとえば、更新が特定のタイプのフィールド値を変更している場合など。私の元のテーブルの特定のフィールドが値を特定の値に変更した後に別のテーブルの値を増やす必要がある場合は、可能でしょうか? ご協力いただければ幸いです。条件付きのMySQLトリガーの更新

CREATE TRIGGER Increment 
AFTER UPDATE ON Subscription 
FOR EACH ROW 
BEGIN 
UPDATE USER 
SET num_sub=num_sub+1 
IF NEW.State <> OLD.State AND NEW.STATE='C' 
END IF 
END 

をしかし、それは、構文エラーが動作しません:
が、私はこれをしようとしています。 phpmyadminを使用してトリガーを挿入します。

+0

可能です。つまり、特定のテーブル操作でトリガーを実行すると、最初のテーブルでDMLを実行しているトリガーがない場合は、別のテーブルで挿入/更新/削除を行うことができます。 あなたがしようとしていることのいくつかのサンプル例を提供してください。 –

+2

IF NEW.column1 <> OLD.column1 AND NEW.column1 = '特定の値' UPDATE table2 ... '。あなたは良い答えをしたい場合は、両方のテーブルのCREATEステートメントを投稿し、あなたの質問に具体的にする必要があります。 –

+0

[Insert/UpdateイベントのMySQLトリガー]の可能な複製(https://stackoverflow.com/questions/15975877/mysql-trigger-on-insert-update-events) – cwallenpoole

答えて

1

はこのような何か試してみてください:

CREATE TRIGGER Increment 
AFTER UPDATE ON Subscription 
FOR EACH ROW 
BEGIN 
    IF NEW.State <> OLD.State AND NEW.STATE='C' THEN 
     UPDATE USER 
     SET num_sub=num_sub+1 
     WHERE USER.id = NEW.user_id; -- change this condition as you need 
    END IF; 
END 

をこれも動作するはずです:

CREATE TRIGGER Increment 
AFTER UPDATE ON Subscription 
FOR EACH ROW 
    UPDATE USER 
    SET num_sub=num_sub+1 
    WHERE USER.id = NEW.user_id 
     AND NEW.State <> OLD.State 
     AND NEW.STATE='C'; 

注:NEWOLD更新されているSubscriptionテーブルから行を参照してください。 OLDには更新前の値が含まれています。 NEWには、更新後の値が含まれています。したがって、stateが変更されているかどうかを確認するには、NEW.State <> OLD.Stateを比較することができます。

+0

USER.idは、USERテーブルまたはSUBSCRIPTIONテーブルのUSER.idである必要がありますか? (明らかに、user.idを指し示すsubscription.userSにはFKがあります)。ありがとう!! – JamieITGirl

+1

あなたはスキーマと関係を提供していないので、それはちょうどquessでした。その行を 'WHERE USER.id = NEW.userS'に変更してください。 BTW: 'USER.id'は' USER'テーブルからの 'id'列を意味します。 'NEW.userS'はあなたが' Subscription'テーブルで更新した行の 'userS'カラムです。 –

+0

私は試しましたが、USERテーブルでは何もしません。 Subscription.UserSがUser.idを指しているが、サブスクリプションテーブルのプライマリキーではないためかもしれません。そうなら、どうすれば解決できますか? – JamieITGirl