Database Trigger dengan MySQL
Database Trigger dengan MySQL
Trigger jika diartikan secara bahasa sederhana yaitu suatu pemicu, jika secara istilah trigger merupakan prosedur yang berhubungan dengan table, view, skema atau database yang dijalankan secara implicit pada saat terjadi sebuah event. Trigger diaktifkan berdasarkan waktu yang diinginkan trigger itu bekerja yang biasa disebut dengan Trigger Timing.
Trigger Timing memiliki 3 timing atau waktu pengaktifan trigger, yaitu:
- BEFORE: Trigger dijalankan sebelum DML event pada tabel.
- AFTER: Trigger dijalankan setelah DML event pada tabel.
- INSTEAD OF : Trigger dijalankan pada sebuah view.
- INSERT : berfungsi untuk memasukkan/menginput data ke dalam tabel, fungsi insert disini jika tabel pertama diinput data yang diinginkan, maka secara auto data tersebut akan masuk/merubah ke tabel kedua.
- UPDATE: pada trigger berfungsi sebagai mana Edit, jika data pada tabel pertama diupdate makan akan secara otomatis tabel kedua juga akan terupdate sesuai dengan data yang diupdate.
- DELETE: Sama seperti perintah trigger sebelumnya, Delete berfungsi menghapus data pada tabel, dan jika tabel pertama dihapus makan pada tabel kedua juga akan secara automatis mengubah data yang di delete.
B. MENGGUNAAN TRIGGER
1. Pembuatan Trigger
Pernyataan CREATE TRIGGER digunakan untuk membuat trigger, termasuk aksi apa yang dilakukan saat trigger diaktifkan.
Sintak:
CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmtKeterangan :
� [DEFINER = { user | CURRENT_USER }]: Definisi user yang sedang aktif, sifatnya opsional.
� trigger_name: Nama trigger.
� trigger_time: waktu menjalankan trigger. Ini dapat berupa BEFORE atau AFTER.
� trigger_event: berupa kejadian yang akan dijalankan trigger.
� tbl_name: Nama tabel yang berasosiasi dengan trigger.
� trigger_stmt: Statemen (tunggal atau jamak) yang akan dijalankan ketika trigger aktif.
Sebagai contoh kasus penggunaan trigger adalah mencatat kejadian-kejadian yang terjadi beserta waktunya pada tabel mahasiswa, dan catatan-catatan tadi disimpan dalam tabel yang lain, misal log_mahasiswa. Misalkan struktur tabel log_mahasiswa adalah sebagai berikut.
Contoh 1:
Isi record sebelumnya pada tabel tbl_mahasiswa dan log_mahasiswa sebagai berikut:
Kemudian buat trigger dengan nama ins_mhs yang akan melakukan event insert secara otomatis ke tabel log_mahasiswa ketika kita melakukan event insert pada tabel tbl_mahasiswa.
Lakukan insert ke tabel tbl_mahasiswa
Untuk melihat hasilnya tampilkan tabel log_mahasiswa
Dari contoh diatas dapat dilihat bahwa ketika satu record pada tabel tbl_mahasiswa disisipkan (insert), maka secara otomatis tabel log_mahasiswa akan disisipkan satu record, yaitu kejadian �Tambah data� dan waktu saat record pada tabel mahasiswa disisipkan.
Contoh 2:
Membuat trigger dengan nama update_mhs yang akan melakukan event insert secara otomatis ke tabel log_mahasiswa ketika kita melakukan event update pada tabel tbl_mahasiswa.
Lakukan update pada tabel tbl_mahasiswa
Untuk melihat hasilnya tampilkan tabel log_mahasiswa
Dari contoh diatas dapat dilihat bahwa ketika satu record pada tabel tbl_mahasiswa diperbaharui (update), maka secara otomatis tabel log_mahasiswa akan disisipkan satu record, yaitu kejadian �Ubah Data� dan waktu saat record pada tabel tbl_mahasiswa diperbaharui.
2. Keyword OLD dan NEW
Untuk merujuk ke kolom-kolom tabel yang diasosiasikan dengan trigger, kita menggunakan keyword OLD dan NEW. Keyword OLD mengacu pada nilai lama, sedangkan NEW merepresentasikan nilai baru. Di trigger INSERT, kita hanya dapat menggunakan keyword NEW karena tidak ada data lama.
Contoh berikut memperlihatkan penggunaan keyword NEW pada trigger INSERT.
Isi record sebelumnya pada tabel tbl_barang.
Melakukan operasi Insert pada tabel tbl_pembelian.
Perubahan isi record pada tabel tbl_barang setelah dilakukan insert pada tabel tbl_pembelian.
Dari contoh di atas dapat dilihat bahwa ketika insert pada tabel tbl_pembelian dengan kode barang B002 (Teh Pucuk) dengan jumlah beli 3 buah, maka pada tabel tbl_barang yang mula-mulanya stok pada barang dengan kode B002 adalah 67 sekarang stoknya menjadi 70 setelah ditambah dengan jumlah beli pada tabel tbl_pembelian.
Untuk kasus trigger DELETE, keyword yang bisa digunakan hanya OLD. Misalkan kita ingin mendefinisikan trigger untuk menghapus semua data pembelian manakala data barang yang sesuai diindikasikan melalui primary key dan foreign key dihapus.
Isi record sebelumnya pada tabel tbl_pembelian.
Melakukan operasi DELETE pada tabel tbl_barang
Isi record pada tabel tbl_pembelian setelah dilakukan operasi delete pada tabel tbl_barang.
Dari contoh kasus di atas ketika melakukan operasi delete pada tabel tbl_barang dengan kode barang B001 maka pada tabel tbl_pembelian yang berisi kode barang yang sama dengan kode barang barang yang dihapus pada tabel tbl_barang yakni B001 akan otomatis dihapus juga.
Khusus untuk operasi UPDATE, kita bisa memanfaatkan keyword NEW maupun OLD.
Isi record sebelumnya pada tabel tbl_barang dan tbl_pembelian.
Lakukan operasi UPDATE pada tabel tbl_pembelian
Untuk melihat hasilnya tampilkan lagi tabel tbl_barang
Dari contoh kasus di atas dapat kita lihat setelah pada tabel tbl_pembelian dilakukan operasi UPDATE pada record dengan kode barang B002 yang mula-mulanya jumlah beli dari 3 buah diganti atau di update menjadi 10 buah, maka secara otomatis pada tabel tbl_barang dengan kode barang yang sama yakni B002 juga mengalami update yang mula-mulanya stoknya 70 buah menjadi 77 buah.
3. TRIGGER KOMPLEKS
Keberadaan trigger secara nyata mampu mengatasi berbagai persoalan pelik, misalnya berkaitan dengan integritas atau audit data. Ini tentu sangat masuk akal, karena trigger juga bisa mengandung pernyataan-pernyataan yang kompleks termasuk percabangan, pengulangan, fungsi-fungsi agregat, bahkan kode pemanggilan prosedur.
Sebagai ilustrasi sederhana, kita bisa mendefinisikan trigger untuk memeriksa operasi update pada tabel tbl_barang maka pada tabel status_barang akan mengalami penambahan record yakni ketika stok tabel tbl_barang adalah 0 dan akan dihapus jika tidak stok tidak sama dengan 0.
Buat trigger dengan nama sts_brg.
Isi record sebelumnya pada tabel tbl_barang dan status_barang
Lakukan operasi update pada tabel tbl_barang.
Untuk melihat hasil dari trigger tersebut silahkan tampilkan tabel status_barang.
Kemudian lakukan operasi update kembali dengan kode barang yang sama ubah stoknya menjadi bukan 0 lagi misalnya stoknya menjadi 90.
Kemudian lihat lagi hasilnya dengan menampilkan tabel status_barang
Dari contoh di atas dapat kita lihat bahwa ketika stok pada tabel di update menjadi 0 maka pada tabel status barang akan mengalami operasi insert dan ketika di update lagi menjadi 90 maka recordnya akan dihapus.
Sumber:
� elektro.um.ac.id/wp-content/uploads/2016/05/Modul-6-Trigger.pdf
� ariv.lecturer.pens.ac.id/Database%202/T13%20-%20Database%20Trigger.pdf
� http://pusat-bahasa.info/relo/download/119542039mohriyan-MySQL2.pdf