Использование триггера обновления для обновления другой таблицы - PullRequest
0 голосов
/ 13 сентября 2011

Программа, над которой я работаю, имеет плохо спроектированный бэкэнд, и в основном есть две разные таблицы, необходимые для хранения одной и той же информации. Я пытаюсь написать триггер, который будет обновлять таблицу B с той же информацией, которая была только что обновлена ​​в таблице A. О, и это использует базу данных MYSQL Я не уверен, что у меня просто ошибка синтаксиса или я пропускаю понятия, любая помощь будет высоко ценится ... вот что у меня есть на данный момент

DELIMITER $$         
DROP TRIGGER IF EXISTS after_update_A;

CREATE TRIGGER `after_update_A` 

    AFTER UPDATE ON `A`  FOR EACH ROW
    BEGIN
        UPDATE TABLE B
        SET  username = NEW.username
           , password = NEW.password
           , email = NEW.email
        WHERE id = NEW.id
    END

    $$
DELIMITER ;

И все ошибки, которые я получаю, похожи на это ... ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '= users.username , B.email = users.email D 'в строке 4

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

Вам нужно закрыть каждый оператор внутри триггера с помощью ;, и я имею в виду каждые .

CREATE TRIGGER `after_update_A` AFTER UPDATE ON `A` FOR EACH ROW
BEGIN
    UPDATE TABLE B
    SET  username = NEW.username
       , password = NEW.password
       , email = NEW.email
    WHERE id = NEW.id;    //<<-----------
END $$
0 голосов
/ 03 сентября 2014

У меня такое ощущение, что вы компилируете .sql как .sh

, триггер - .sql и должен быть выполнен с использованием

mysql-batch-commands.html

ps То, что говорит @Johan, очевидно, тоже правильно

ps2 Теперь я вижу еще одну ошибку: вам понадобится разделитель между операторами drop и create

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...