はい、できますが、その方法はバージョンによって異なります。
まず第一に、トリガー自体はトランザクションです。あなたの状況では、さらに2つの挿入を実行する挿入トリガーがあります。それらのいずれかが失敗した場合、あなたはあなたの望む効果を得るでしょう。
次の例を考えてみましょう:
CREATE TABLE a (colA INT);
CREATE TABLE b (colB INT);
CREATE TABLE c (colC INT);
delimiter :
CREATE TRIGGER testtrig BEFORE INSERT ON a
FOR EACH ROW BEGIN
INSERT INTO b(colB) VALUES(NEW.colA);
INSERT INTO c(banana) VALUES (NEW.colA); -- note the faulty column name
END;:
delimiter ;
失敗した挿入を実行すると、次のようになります。
mysql> INSERT INTO a VALUES (5);
ERROR 1054 (42S22): Unknown column 'banana' in 'field list'
mysql> SELECT * FROM a;
Empty set (0.00 sec)
これは希望する結果と一致します。
より一般的には、挿入を試みる前にデータを検証するために使用できるロジックがある場合、さまざまな方法でトリガーを失敗させることができます。
- MySQL 5.5では、シグナル> トリガーからエラーを発生させ、挿入全体を失敗させるメカニズム。
- MySQL 5.5より前では、意図的なエラーを生成してトリガーを失敗させることができました。
質問のリンクから5.0を使用していると思います。必要に応じて、トリガーを失敗させるために、たとえば無効な列に意図的に挿入するなど、意図的なエラーを実行できます。ただし、質問で説明した状況は、私の回答の冒頭で説明したように、すでにトランザクションで処理されています。