Несколько операторов вставки / обновления внутри триггера? - PullRequest
16 голосов
/ 17 декабря 2009

Просто быстрый вопрос, на который, без сомнения, кто-то там будет знать ответ.

Мне нужно сделать несколько вставок / обновлений в триггере. Каждая попытка заканчивается неудачей: (* ​​1003 *

DROP TRIGGER IF EXISTS `Insert_Article`//
CREATE TRIGGER `Insert_Article` AFTER INSERT ON `Article`
 FOR EACH ROW insert into FullTextStore (`Table`, `PrimaryKey`, `ColumnName`, `Data`, `Created`) values ('Article', NEW.ArticleID, 'Description', NEW.Description, UNIX_TIMESTAMP())
//

На данный момент вышесказанное просто вставляет строку в таблицу при вставке родительской таблицы. Это отлично работает.

Чтобы заставить это работать с множественными значениями, мне нужно сделать

DROP TRIGGER IF EXISTS `Insert_Article`//
CREATE TRIGGER `Insert_Article` AFTER INSERT ON `Article`
 FOR EACH ROW insert into FullTextStore (`Table`, `PrimaryKey`, `ColumnName`, `Data`, `Created`)
select 'Article', NEW.ArticleID, 'Description', NEW.Description, UNIX_TIMESTAMP()
union
select 'Article', NEW.ArticleID, 'Keywords', NEW.Keywords, UNIX_TIMESTAMP()
//

Но ... Должен быть более легкий путь? Когда я пытаюсь использовать; завершить каждое утверждение, оно завершается с

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL version for the right syntax to use near 'select 'Article', NEW.ArticleID, 'Keywords', 'NEW.Keywords, UNIX_TIMESTAMP())' at line 1

Я даже не могу заставить работать несколько операторов обновления.

Было бы здорово помочь, если бы кто-нибудь мог указать, что я делаю неправильно?

Приветствия

Gavin

1 Ответ

27 голосов
/ 17 декабря 2009

Из документов: Создать синтаксис триггера

trigger_stmt является оператором для выполнить, когда активируется триггер. Если Вы хотите выполнить несколько заявления, используйте НАЧАЛО ... КОНЕЦ составной оператор конструкции. это также позволяет использовать тот же заявления, которые допустимы в сохраненные процедуры

CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...