Database Trigger dengan MySQL
A. PENGERTIAN TRIGGER
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. Waktu untuk trigger aktif ini disebut juga dengan istilah Trigger Timing.
Tiga Timing atau Waktu Pengaktifan Trigger
- BEFORE: Trigger dijalankan sebelum DML (Data Manipulation Language) event pada tabel.
- AFTER: Trigger dijalankan setelah DML event pada tabel.
- INSTEAD OF : Trigger dijalankan pada sebuah view.
Tiga Event yang Dimiliki Trigger
- INSERT: Mengaktifkan trigger ketika terjadi event insert atau tambah data pada sebuah tabel dalam database.
- UPDATE: Mengaktifkan trigger ketika terjadi event update atau ubah data pada sebuah tabel dalam database.
- DELETE: Mengaktifkan trigger ketika terjadi event delete atau hapus data pada sebuah tabel dalam database.
Hasil penulisan dari sebuah Trigger akan menimbulkan efek manipulasi database secara otomatis sesuai dengan yang kita inginkan. Misalnya, ketika melakukan insert atau tambah data baru pada sebuah tabel, maka kita juga dapat melakukan event insert, update, delete dan event lainnya pada tabel yang ada di dalam database secara otomatis.
B. MENGGUNAKAN 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_stmt;
Keterangan:
- [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
2. Contoh Kasus Penggunaan Trigger
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 pada tabel log_mahasiswa. Misalkan struktur tabel tbl_mahasiswa dan tabel log_mahasiswa adalah sebagai berikut.
Setelah mengetahui struktur dari kedua tabel di atas, maka selanjutnya kita akan menampilkan terlebih dahulu isi record sebelumnya pada tabel tbl_mahasiswa dan log_mahasiswa. Berikut ini query untuk menampilkan isi record pada tabel tbl_mahasiswa dan tabel log_mahasiswa.
Kemudian buat trigger dengan nama tambah_mahasiswa yang akan melakukan event insert (tambah data) secara otomatis ke tabel log_mahasiswa ketika kita menginputkan data baru pada tabel tbl_mahasiswa.
Keterangan:
3. Melakuan Uji Coba Pada Trigger yang Dibuat
Setelah berhasil membuat trigger pada percobaan di atas, maka tidak ada salahnya kita mencoba apakah trigger yang dibuat tersebut sudah dapat berfungsi atau berjalan dengan baik. Berikut ada beberapa langkah dalam uji coba pada trigger.
- Pertama-tama kita akan melakukan insert atau tambah data baru pada tabel tbl_mahasiswa.
- Tampilkan tabel tbl_mahasiswa untuk melihat apakah sudah berhasil menambahkan data baru pada tabel tersebut.
- Tampilkan kembali tabel log_mahasiswa untuk mengetahui apakah trigger berhasil dijalankan atau tidak.
Berikut ini isi record dari tabel log_mahasiswa setelah trigger yang sebelumnya dibuat aktif.
Setelah melihat isi record dari tabel log_mahasiswa di atas maka dapat disimpulkan bahwa yang telah dibuat tersebut berhasil berjalan dengan baik. Hal ini dikarenakan terdapat record baru disisipkan ke tabel log_mahasiswa sesaat setelah melakukan insert data pada tabel tbl_mahasiswa;
Agar lebih paham, mungkin perlu ada satu tambahan contoh lagi. Jika pada contoh kasus di atas kita trigger akan aktif ketika melakukan INSERT pada tabel tertentu maka untuk contoh ke dua ini kita akan membuat trigger yang akan aktif ketika melakukan UPDATE pada tabel tertentu.
- Membuat Trigger dengan menggunakan trigger timing AFTER dan trigger event UPDATE
- Melakukan perintah UPDATE pada tabel tbl_mahasiswa dengan mengubah salah satu record pada tabel tersebut.
- Menampilkan kembali tabel tbl_mahasiswa untuk melihat perubahan record setelah dilakukan perintah update.
Pada record ke-3 telah terjadi perubahan yang sebelumnya alamatnya 'Mataram' menjadi 'Labuhan Jambu'.
- Menampilkan tabel log_mahasiswa untuk mengetahui apakah ada perubahan pada record setelah trigger diaktifkan.
Dari contoh diatas dapat disimpulkan 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.
4. Keyword OLD dan NEW Pada Trigger
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. Sedangkan keyword OLD hanya dapat digunakan pada trigger event DELETE.
Keyword NEW
Salah satu contoh penerapan keyword New yakni pada kasus data stok data barang pada tabel barang. Yang mana jumlah stok dari barang akan bertambah atau berkurang secara otomatis. Berkurang ketika terjadi penjualan barang dan bertambah ketika terjadi pembelian barang.
Misalkan di dalam database kita memiliki tabel tbl_barang dan tbl_pembelian dengan isi record sebagai berikut.
- Sebelum membuat trigger, silahkan tampilkan terlebih dahulu isi record yang sudah ada pada tabel tbl_barang dan tbl_pembelian.
Isi record tabel tbl_barang:
Isi record tabel tbl_pembelian:
- Membuat Trigger dengan nama update_stok yang menggunakan trigger timing AFTER dan trigger event UPDATE dan keyword NEW yang berfungsi untuk mengupdate jumlah stok pada tabel barang.
- Melakukan tambah data pembelian dengan perintah INSERT pada tabel tbl_pembelian.
- Menampilkan kembali tabel tbl_pembelian untuk mengetahui data sudah berhasil ditambah atau belum.
- Menampilkan kembali tabel tbl_barang untuk melihat perubahan isi record terutama pada kolom stok setelah dilakukan insert pada tabel tbl_pembelian.
Keyword OLD
Untuk kasus trigger DELETE, keyword yang bisa digunakan hanya OLD. Seperti yang diketahui bahwa tabel tbl_barang dengan tabel tbl_pembelian memiliki relasi dimana kode_barang merupakan primary key di tbl_barang menjadi foreign key pada tbl_pembelian. Jadi jika pada tbl_barang ada data atau record yang dihapus maka kode_barang yang ada pada tbl_pembelian juga seharusnya ikut terhapus.
Agar lebih mudah dipahami silahkan perhatikan contoh yang di bawah ini.
- Terlebih dahulu tampilkan isi atau record yang ada pada tbl_barang dan tbl_pembelian
Isi record pada tbl_barang
Isi record pada tbl_pembelian
- Kemudian buat trigger dengan event DELETE, timing AFTER dan keyword OLD
- Menghapus salah satu record yang ada pada tbl_barang. Misalkan hapus record dengan kode_barang B001
- Menampilkan kembali tbl_barang dan tabel_pembelian setelah melakukan hapus data pada tbl_barang
Keyword OLD dan New dalam Satu Trigger
Khusus untuk operasi UPDATE, kita bisa memanfaatkan keyword NEW maupun OLD dan juga bisa menggunakan keyword OLD dan New dalam satu trigger. Untuk lebih jelas perhatikan contoh di bawah ini.
- Terlebih dahulu tampilkan data pada tbl_barang dan tbl_pembelian untuk mengetahui isi record yang ada sekarang ini.
Isi record pada tbl_barang
Isi record pada tbl_pembelian
- Setelah itu buat trigger dengan query seperti di bawah ini.
- Mengubah salah satu data yang ada pada tbl_barang. Misalkan kita akan mengubah kode_barang dari Good Day yang sebelumnya B003 menjadi B005. Silahkan gunakan query di bawah ini.
- Menampilkan kembali isi record dari tbl_barang dan tbl_pembelian
C. 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 pada tbl_barang adalah 0. Kemudian record akan dihapus jika stok pada tbl_barang tidak sama dengan 0.
Untuk menjaga ketersedian barang agar selalu ada, maka perlu dilakukan pengecekan pada stok dari dari masing-masing barang yang ada. Secara sederhana kita dapat melakukan pengecekan stok pada suatu sistem penjualan dengan cara membuatkan sebuah tabel dalam database yang akan memberikan informasi tentang barang mana saja yang sudah habis stoknya. Adapun tabel yang dimaksud adalah tabel status_barang.
Pada contoh kasus di atas, maka tidak dapat diatasi dengan menggunakan trigger yang sebelumnya sudah kita coba. Akan tetapi perlu menggunakan trigger yang lebih kompleks lagi. Misalkan kita memiliki tabel barang dan tabel status barang dengan isi record sebagai berikut.
Silahkan buat trigger dengan nama update_status dengan menggunakan query di bawah ini. Berbeda dengan query pembuatan trigger sebelumnya untuk trigger kompleks dimulai dengan kode DELIMITER // dan di akhir dengan tanda //
Kemudian kita akan mengubah stok pada barang dengan kode 'B005' menjadi 0.
Tampilkan kembali tabel status_barang dan tbl_barang.
Barang dengan kode 'B005' sekarang stoknya telah berubah menjadi 0. Sedangkan pada tbl_status barang terjadi penambahan record baru seperti yang dijukkan oleh gambar di bawah ini.
Kemudian lakukan operasi update kembali dengan kode barang yang sama (B005) ubah stoknya menjadi bukan 0 lagi misalnya stoknya menjadi 28.
Kemudian tampilkan lagi isi record dari tbl_barang dan status_barang.
Dapat dilihat pada tbl_barang, barang dengan kode 'B005' telah berubah stoknya dari 0 menjadi 28. Sedangkan pada status_barang, barang dengan kode 'B005' telah terhapus.
Berhubung pembahasan pada artikel sudah terlalu panjang dan akan terasa semakin membosankan untuk dibaca, mungkin akan saya cukupkan dahulu pembahasannya. Dan seperti biasa jika ada dari pembahasan saya di atas ada yang tidak dimengerti silahkan tanyakan pada kolom komentar. See you Next article :)
- - https://elektro.um.ac.id/wp-content/uploads/2016/05/Modul-6-Trigger.pdf
- - https://ariv.lecturer.pens.ac.id/Database%202/T13%20-%20Database%20Trigger.pdf
- - https://pusat-bahasa.info/relo/download/119542039mohriyan-MySQL2.pdf
7 comments
studioznak
1 ID All in One Games Support Android,Blackberry dan iOS,Ajak Temanmu Bermain Bersama Dan Menangkan Jackpotnya,NantikanEvent & BonusYang Menarik Menanti Anda Hanya Di WWW.988POKER.CO
Poker Texas>>Live Poker>>Domino QQ>>Bandar Ceme>>BlackJack>>Capsa Susun Online
=======>988POKER
=======>DAFTAR SEKARANG JUGA
=======>Agen Judi Online
=======>Poker Texas
=======>Domino QQ
=======>Bandar Ceme
=======>BlackJack
=======>Capsa Susun
>>>>>>>>Anies Sandi
>>>>>>>>Berita Jakarta
>>>>>>>>Lantai 7 Alexis
>>>>>>>>Ahok-Djarot
>>>>>>>>Setya Novanto
Menangkan Hadiah - Hadiahnya Tiap Minggu !!!
Info Lebih lanjut bisa menghubungi kami melalui :
Fanpage Facebook : 988POKER
SMS : 0812-91-8888-08
WhatsApp : 0812-91-8888-08
BBM : D62477FB
LINE : 988bet
Instagram : 988poker