2009-12-17 3 views
15

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

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

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()) 
// 

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

Чтобы получить эту работу с Mulitple значений I нужно сделать

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

ответ

21

Из документов: Create Trigger Syntax

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; 
+0

Вы человек (будучи в мире ПК п все такое). спасибо. Я думаю, что я оставил BEGIN при использовании END. – Gavin

Смежные вопросы