2016-06-29 12 views
0

私は2つのテーブルのルートとlocを持っています。 drivernameまたはrt_numのいずれかがルートテーブルで変更されると、私はlocテーブルを更新する必要があります。私は終日、次のコードを試してみました。各UPDATE文はそれ自身でトリガーとして機能します。私はそれが全然できないかどうか分からない。同じトリガーでMysql 2の更新

 DELIMITER | 
    CREATE TRIGGER `add2` AFTER UPDATE ON `route` 
    FOR EACH ROW 
    BEGIN 
    AFTER UPDATE ON `route`; 

    UPDATE loc 
     SET drivername = new.driver_d_name 
     WHERE rt_nanme = old.rt_num; 

    UPDATE loc 
    SET rt_nanme = new.rt_num 
    WHERE rt_nanme = old.rt_num;  

    END; 
    | 
    DELIMITER ;

答えて

0

古い値と比較?

さらに、2つの更新ステートメントは必要ありません。 So:

DELIMITER $$ 

CREATE TRIGGER `add2` AFTER UPDATE ON `route` 
FOR EACH ROW 
BEGIN 

    UPDATE loc 
     SET drivername = new.driver_d_name, 
      rt_nanme = new.rt_num 
    WHERE rt_nanme = old.rt_num; 

END;$$ 

DELIMITER ; 
+0

ありがとうございましたGordon Linoffは魅力的な作品です。私は65歳でこれを新しくしています。私は方法を複雑にする傾向があります。 – John

+0

@ジョン。 。 。新しいスキルを学ぶための功績。 –

0

having multiple updates in a single triggerに間違いがありません。しかし、あなたの引き金には構文上の問題があり、おそらく失敗を引き起こしているのです。代わりにこれを試してみてください:更新前

DELIMITER | 
CREATE TRIGGER `add2` AFTER UPDATE ON `route` 
FOR EACH ROW 
BEGIN 

    UPDATE loc 
    SET drivername = new.driver_d_name 
    WHERE rt_nanme = old.rt_num; 

    UPDATE loc 
    SET rt_nanme = new.rt_num 
    WHERE rt_nanme = old.rt_num;  

END 
0

は、なぜあなたはafter update文を繰り返している

DELIMITER | 
    CREATE TRIGGER `add2` AFTER UPDATE ON `route` 
    FOR EACH ROW 
    BEGIN 
     IF(new.driver_d_name!=old.driver_d_name) THEN 
      UPDATE loc 
      SET drivername = new.driver_d_name 
      WHERE rt_nanme = old.rt_num; 
     END IF; 
     IF(new.rt_num!=old.rt_num) THEN 
      UPDATE loc 
      SET rt_nanme = new.rt_num 
      WHERE rt_nanme = old.rt_num;  
      END IF; 
    END; 
    | 
    DELIMITER ; 
関連する問題