Untuk beberapa operasi database, trigger dapat membantu pengembangan aplikasi dengan mengeksekusi beberapa perintah untuk setiap
SQL Statement yang dikirimkan ke database. Beberapa perintah tersebut dapat dilakukan pada trigger BEFORE dan trigger AFTER. Namun penggunaannya secara umum, berbeda.
"Trigger BEFORE biasanya digunakan untuk melakukan validasi sebelum melakukan perubahan terhadap database. Trigger BEFORE dijalankan sebelum ada perubahan apapun terhadap database. Sebagai ilustrasi, di dalam database bank terdapat tabel rekening dan tabel transaksi. Jika nasabah melakukan penarikan dari rekeningnya, nasabah harus memiliki saldo yang cukup dalam rekeningnya untuk melakukan penarikan. Trigger BEFORE dapat melakukan validasi tersebut sehingga transaksi penarikan yang melebihi saldo dapat dicegah.
Trigger AFTER biasanya digunakan ketika ada informasi yang perlu ditambahkan dalam tabel lain setelah melakukan perubahan terhadap database. Trigger AFTER dijalankan setelah perubahan terhadap database dilakukan. Dalam ilustrasi sebelumnya, setelah transaksi penerikan yang dilakukan nasabah berhasil disimpan ke dalam database, perlu ada penyesuaian terhadap data saldo dalam tabel rekening. Hal ini dapat dilakukan dengan menggunakan Trigger AFTER." StackOverflow
MySQL 5.5
Dimulai dengan versi 5.5, MySQL menyediakan perintah "
SIGNAL" yang dapat mendeklarasikan
error. Perintah ini dapat digunakan untuk memberikan informasi perihal
error code dan
error description dari
error yang dideklarasikan.
MySQL < 5.5
Untuk MySQL versi < 5.5 ada
workaround untuk menggantikan perintah SIGNAL, ada cara untuk membuat perintah INSERT tidak dilakukan oleh database. Dengan menggunakan perintah SELECT terhadap nama field yang tidak ada dalam tabel, MySQL akan menampilkan
error yang memberikan informasi bahwa nama field yang diminta tidak ada. Untuk menampilkan deskripsi
error, nama field tersebut berisi pesan
error yang akan kita sampaikan. Cara ini memang tidak elegan namun dapat dilakukan.
CREATE TRIGGER myTrigger
BEFORE INSERT
FOR EACH ROW
BEGIN
IF (<TheConditionIsNotvalid>) THEN
SELECT "<YourMeaningfullErrorMessageGoesHere>"
FROM myTable
END IF;
END;
Trigger Or No Trigger
Penggunaan trigger bukan tanpa konsekuensi, ada beberapa
dampak negatif yang dapat timbul. Dalam mendefinisikan sebuah trigger, dapat digunakan
stored procedure. Bahasa yang digunakan dalam
stored procedure seringkali jauh berbeda antar vendor database. Bahkan dalam vendor yang sama ada kemungkinan penambahan fitur dalam versi yang lebih tinggi. Sedangkan upgrade ke versi yang lebih tinggi belum tentu merupakan solusi yang efisien dalam pengembangan aplikasi yang kompleks. Bila diperlukan migrasi database, maka hampir pasti setiap
stored procedure yang ada perlu disesuaikan.