触发器内有多个insert / update语句?

时间:2009-12-17 13:00:03

标签: mysql database triggers

一个简单的问题,毫无疑问,有人会知道答案。

我需要能够在触发器中进行多次插入/更新。每一次尝试都以失败告终:(

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 个答案:

答案 0 :(得分:27)

来自文档: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;