2016-06-29 3 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

Почему вы повторяющей after update заявление?

Кроме того, вам не нужны два оператора обновления. Итак:

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

Спасибо, Гордон Линофф работает как шарм. Я новичок в этом в возрасте 65 лет, и я склоняюсь к тому, чтобы усложнять ситуацию. – John

+0

@John. , , Престижность для изучения новых навыков. –

0

having multiple updates in a single trigger 0 ничего не найдено. Но ваш триггер имеет проблему синтаксиса, и именно это, вероятно, вызывает отказ. Попробуйте вместо этого:

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

перед обновлением сравнить его со старым значением

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 ; 
Смежные вопросы