Создание триггера MySQL для проверки данных в другой таблице - PullRequest
2 голосов
/ 13 мая 2010

Я пытаюсь настроить триггер MySQL, который выполняет следующие действия:

  • Когда кто-то вставляет данные в databaseA.bills, он проверяет, есть ли в базе данных databaseB.bills эта строка, а если нет, то выполняет дополнительную вставку в databaseB.bills.

Вот что у меня есть:

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills
FOR EACH ROW
  BEGIN
    IF NOT EXISTS (SELECT 1 FROM databaseB.bills WHERE billNumber=NEW.billNumber) THEN
      INSERT INTO databaseB.bills (billNumber) VALUES (NEW.billNumber)
    END IF
  END;//
DELIMITER ;

Проблема в том, что я не могу создать его через консоль mysql или phpMyAdmin. Он возвращает синтаксические ошибки рядом с END IF END, и я уверен, что это проблема разделителя.

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END IF END' at line 6

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 13 мая 2010

Если у вас есть уникальные индексы, вы всегда можете сделать INSERT IGNORE

 CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills
    FOR EACH ROW
      BEGIN
          INSERT IGNORE INTO databaseB.bills (billNumber) VALUES (NEW.billNumber);
      END //
1 голос
/ 13 мая 2010

Если вы используете // в качестве разделителя, вам просто нужно использовать точки с запятой в конце строки sql внутри тела триггера и использовать // после триггера END:

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills
FOR EACH ROW
  BEGIN
    IF NOT EXISTS (SELECT 1 FROM databaseB.bills WHERE billNumber=NEW.billNumber) THEN
      INSERT INTO databaseB.bills (billNumber) VALUES (NEW.billNumber);
    END IF;
  END //
...