Ya, Anda bisa, tetapi cara melakukannya bergantung pada versi Anda.
Pertama-tama, pemicu itu sendiri bersifat transaksional; dalam situasi Anda, Anda memiliki pemicu penyisipan yang melakukan dua penyisipan lebih lanjut. Jika salah satu gagal, Anda akan mendapatkan efek yang diinginkan.
Perhatikan contoh berikut:
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 ;
Sekarang, ketika saya menjalankan sisipan yang gagal, ini terjadi:
mysql> INSERT INTO a VALUES (5);
ERROR 1054 (42S22): Unknown column 'banana' in 'field list'
mysql> SELECT * FROM a;
Empty set (0.00 sec)
Ini cocok dengan hasil yang Anda inginkan.
Secara umum, jika Anda memiliki logika yang dapat Anda gunakan untuk memvalidasi data Anda sebelum mencoba memasukkan, Anda dapat menggagalkan pemicu dengan cara yang berbeda:
- Di MySQL 5.5, Anda dapat menggunakan SIGNAL mekanisme untuk memunculkan kesalahan dari pemicu Anda, sehingga menyebabkan kegagalan seluruh penyisipan.
- Sebelum MySQL 5.5, Anda dapat membuat kesalahan yang disengaja untuk menggagalkan pemicu.
Saya kira Anda menggunakan 5.0 dari tautan dalam pertanyaan Anda, jadi jika perlu, Anda dapat melakukan kesalahan yang disengaja, misalnya dengan sengaja memasukkan ke dalam kolom yang tidak valid, untuk gagal memicu. Namun, situasi yang Anda jelaskan dalam pertanyaan Anda sudah ditangani secara transaksional, seperti yang dijelaskan di awal jawaban saya.