トリガー内に複数の挿入/更新ステートメントがありますか? 質問する

トリガー内に複数の挿入/更新ステートメントがありますか? 質問する

ちょっとした質問ですが、間違いなく誰かが答えを知っているでしょう。

トリガー内で複数の挿入/更新を実行できるようにする必要があります。すべての試みは失敗に終わります :(

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;

おすすめ記事