Pertemuan 6: Trigger
Pada pertemuan ini, mahasiswa akan mempelajari trigger, yaitu objek database yang diasosiasikan dengan sebuah tabel dan dijalankan secara otomatis ketika suatu event tertentu terjadi pada tabel tersebut. Jika pada pertemuan sebelumnya mahasiswa berfokus pada view sebagai query tersimpan yang dapat dipanggil kembali, maka pada pertemuan ini pembelajaran diarahkan pada bagaimana database dapat merespons perubahan data secara otomatis.
Modul ini disusun untuk membantu mahasiswa memahami bahwa dalam praktik basis data, ada kondisi-kondisi tertentu yang membutuhkan aksi otomatis ketika data ditambahkan, diubah, atau dihapus. Misalnya, memberi nilai default sebelum data dimasukkan, mencatat perubahan data ke tabel log, atau menyimpan data yang dihapus ke tabel cadangan. Dalam situasi seperti ini, trigger menjadi sangat berguna karena logika tersebut dapat dijalankan langsung di level database.
Secara umum, modul ini memuat tujuan pembelajaran, gambaran umum materi, materi inti mengenai konsep dan penggunaan trigger, serta aktivitas praktikum untuk mencoba pembuatan, pengujian, peninjauan, dan penghapusan trigger secara langsung. Melalui susunan ini, mahasiswa diharapkan memahami terlebih dahulu konsep trigger sebelum masuk ke tahap praktik.
Tujuan Pembelajaran
Setelah mengikuti praktikum pada pertemuan ini, mahasiswa diharapkan mampu:
- menjelaskan konsep trigger sebagai objek database yang berjalan otomatis ketika event terjadi pada tabel,
- membedakan fungsi
BEFOREdanAFTERtrigger, - membedakan event
INSERT,UPDATE, danDELETEsebagai pemicu trigger, - menggunakan
OLDdanNEWuntuk mengakses nilai sebelum dan sesudah perubahan data, - membuat trigger sederhana untuk memodifikasi nilai sebelum data disimpan,
- membuat trigger untuk mencatat perubahan data ke tabel lain,
- menampilkan trigger yang sudah dibuat dengan
SHOW TRIGGERS, - menghapus trigger dengan
DROP TRIGGER, - memahami batasan trigger, termasuk larangan mengubah tabel yang sama dari trigger yang sedang dipicu.
Gambaran Umum
Topik utama pada pertemuan ini adalah trigger. Dalam MySQL, trigger adalah objek database yang dikaitkan dengan sebuah tabel permanen dan akan dijalankan secara otomatis ketika suatu event tertentu terjadi pada tabel tersebut. Event yang dimaksud dapat berupa INSERT, UPDATE, atau DELETE.
Pembahasan dimulai dari sintaks dasar CREATE TRIGGER, dilanjutkan dengan pemahaman tentang dua waktu aktivasi trigger, yaitu BEFORE dan AFTER. Setelah itu, mahasiswa akan mempelajari bagaimana isi trigger dituliskan, bagaimana beberapa statement dapat dibungkus dalam BEGIN ... END, serta bagaimana OLD dan NEW digunakan untuk mereferensikan nilai lama dan nilai baru dari suatu baris data.
Pada bagian berikutnya, modul ini memperlihatkan dua contoh utama penggunaan trigger. Pertama, BEFORE trigger untuk mengubah nilai data sebelum proses INSERT benar-benar dilakukan. Kedua, AFTER trigger untuk mencatat perubahan data ke tabel log setelah proses UPDATE terjadi. Modul juga menunjukkan salah satu batasan penting trigger, yaitu kita tidak dapat mengubah tabel yang sama dengan tabel yang sedang memicu trigger di dalam body trigger tersebut.
Sebagai penutup, mahasiswa akan mempelajari cara melihat trigger yang sudah dibuat menggunakan SHOW TRIGGERS dan cara menghapus trigger dengan DROP TRIGGER. Secara garis besar, pertemuan ini dirancang agar mahasiswa tidak hanya mampu membuat trigger, tetapi juga memahami kapan trigger dijalankan, data apa yang dapat diakses oleh trigger, dan batasan-batasan yang perlu diperhatikan saat trigger digunakan.
Materi Inti
1. Pengertian Trigger
Trigger adalah objek database yang diasosiasikan dengan sebuah tabel. Trigger akan diaktifkan ketika sebuah event terjadi pada tabel tersebut. Tabel yang diasosiasikan dengan trigger harus berupa tabel permanen, bukan temporary table.
Trigger berguna ketika kita ingin menjalankan aksi tertentu secara otomatis di level database, misalnya:
- mengubah nilai sebelum data disimpan,
- mencatat perubahan data,
- menyimpan riwayat data yang dihapus,
- menegakkan aturan tertentu sebelum atau sesudah data berubah.
2. Sintaks Dasar CREATE TRIGGER
Trigger dibuat menggunakan sintaks berikut:
CREATE TRIGGER <trigger_name> <trigger_time> <trigger_event>
ON <table>
FOR EACH ROW <trigger_body statements>Penjelasan singkat:
trigger_nameadalah nama trigger,trigger_timeadalah waktu aktivasi trigger,trigger_eventadalah event yang memicu trigger,tableadalah tabel yang diasosiasikan dengan trigger,FOR EACH ROWberarti trigger dijalankan untuk setiap baris yang terpengaruh,trigger_bodyadalah statement yang dijalankan ketika trigger aktif.
Jika body trigger terdiri dari beberapa statement, maka statement tersebut dapat ditulis di antara BEGIN ... END.
3. Trigger Time: BEFORE dan AFTER
Trigger memiliki dua waktu aktivasi utama.
| Trigger Time | Penjelasan |
|---|---|
BEFORE | trigger dijalankan sebelum perubahan data benar-benar dilakukan |
AFTER | trigger dijalankan setelah perubahan data selesai dilakukan |
Secara umum:
BEFOREcocok digunakan untuk memvalidasi atau memodifikasi nilai sebelum disimpan,AFTERcocok digunakan untuk mencatat perubahan atau menjalankan aksi lanjutan setelah perubahan berhasil terjadi.
4. Trigger Event: INSERT, UPDATE, dan DELETE
Jenis event yang dapat memicu trigger adalah sebagai berikut.
| Trigger Event | Penjelasan |
|---|---|
INSERT | trigger aktif ketika baris baru ditambahkan ke tabel |
UPDATE | trigger aktif ketika baris pada tabel dimodifikasi |
DELETE | trigger aktif ketika baris pada tabel dihapus |
Catatan penting:
INSERTdapat dipicu olehINSERT,LOAD DATA, atauREPLACE,DELETEdapat dipicu olehDELETEdanREPLACE,DROP TABLEdanTRUNCATE TABLEtidak mengaktifkan triggerDELETE.
5. Aturan Pembuatan Trigger
Ada beberapa aturan penting yang perlu diperhatikan saat membuat trigger:
- tidak boleh ada dua trigger pada tabel yang sama dengan kombinasi
trigger_timedantrigger_eventyang sama, - artinya, satu tabel tidak dapat memiliki dua buah
BEFORE UPDATEtrigger, - tetapi satu tabel masih bisa memiliki
BEFORE UPDATEdanAFTER UPDATEsekaligus.
Aturan ini penting agar perilaku trigger tetap jelas dan tidak menimbulkan konflik.
6. OLD dan NEW
Dalam trigger, MySQL menyediakan keyword OLD dan NEW untuk mereferensikan nilai data.
| Keyword | Digunakan untuk |
|---|---|
OLD.nama_kolom | nilai kolom sebelum data diupdate atau dihapus |
NEW.nama_kolom | nilai kolom yang akan dimasukkan atau nilai kolom setelah diupdate |
Secara umum:
- pada
INSERT, yang digunakan adalahNEW, - pada
DELETE, yang digunakan adalahOLD, - pada
UPDATE, keduanya dapat digunakan karena ada nilai lama dan nilai baru.
7. BEFORE Trigger
BEFORE trigger dijalankan sebelum operasi terhadap tabel benar-benar dilakukan. Trigger jenis ini sangat berguna ketika kita ingin:
- mengganti nilai tertentu sebelum data disimpan,
- memberikan nilai default,
- melakukan validasi atau penyesuaian nilai.
Pada modul ini, contoh BEFORE INSERT digunakan untuk memeriksa nilai salary.
- jika
salarybernilaiNULLatau0, maka salary diubah menjadi1000, - jika selain itu, maka salary ditambah
100.
Dengan demikian, trigger dapat membantu menjaga aturan bisnis sebelum data benar-benar masuk ke tabel.
8. AFTER Trigger
AFTER trigger dijalankan setelah perubahan data berhasil dilakukan. Trigger jenis ini cocok digunakan ketika kita ingin:
- menyimpan log perubahan,
- mencatat siapa yang melakukan perubahan,
- menyimpan data lama ke tabel cadangan,
- membuat jejak audit sederhana.
Pada modul ini, contoh AFTER UPDATE digunakan untuk mencatat perubahan nilai salary pada tabel employee ke tabel trans_log.
9. Batasan Trigger
Ada salah satu batasan penting yang perlu dipahami saat menggunakan trigger, yaitu:
kita tidak dapat mengubah tabel yang sama dengan tabel yang sedang memicu trigger dari dalam body trigger tersebut.
Contohnya, jika sebuah BEFORE UPDATE trigger dibuat pada tabel employee, maka trigger tersebut tidak boleh melakukan UPDATE employee ... terhadap tabel yang sama. Jika dipaksa, MySQL akan menampilkan error.
Batasan ini perlu dipahami agar mahasiswa tidak salah mendesain logika trigger.
10. Melihat Trigger yang Sudah Dibuat
Trigger yang telah dibuat dapat ditampilkan menggunakan:
SHOW TRIGGERS IN nama_database;Perintah ini akan menampilkan informasi seperti:
- nama trigger,
- event,
- tabel yang diasosiasikan,
- statement trigger,
- timing,
- definer.
Perintah ini sangat berguna untuk memeriksa trigger yang sudah aktif pada sebuah database.
11. Menghapus Trigger
Trigger yang sudah tidak diperlukan dapat dihapus menggunakan:
DROP TRIGGER nama_trigger;Perintah ini hanya menghapus definisi trigger, bukan tabel yang diasosiasikan dengannya.
Penutup Pengantar
Sebelum masuk ke aktivitas praktikum, mahasiswa perlu memahami bahwa seluruh materi pada pertemuan ini saling berkaitan. CREATE TRIGGER, BEFORE, AFTER, event INSERT, UPDATE, DELETE, penggunaan OLD dan NEW, pembuatan log, pencadangan data, SHOW TRIGGERS, dan DROP TRIGGER merupakan bagian dari satu proses yang sama, yaitu membuat database mampu merespons perubahan data secara otomatis. Dengan memahami materi inti ini terlebih dahulu, mahasiswa akan lebih mudah mengikuti percobaan praktikum secara runtut dan memahami alasan di balik setiap langkah yang dijalankan.