Несколько операторов вставки/обновления внутри триггера?
Просто быстрый вопрос, который, несомненно, кто-то там будет знать ответ.
Мне нужно иметь возможность делать несколько вставных/обновлений внутри триггера. Каждая попытка заканчивается неудачей: (
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
Я даже не могу заставить несколько операторов обновления работать.
Было бы очень полезно, если бы кто-нибудь мог указать, что я делаю неправильно?
Приветствия
Гэвин
Ответы
Ответ 1
Из документов: Создать триггерный синтаксис
trigger_stmt - это утверждение выполняются при активации триггера. Если вы хотите выполнить несколько заявления, используйте BEGIN... END составная конструкция оператора. Эта также позволяет использовать утверждения, допустимые в пределах хранимые процедуры
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;