Skip to content
Pertemuan 6: Trigger

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:

  1. menjelaskan konsep trigger sebagai objek database yang berjalan otomatis ketika event terjadi pada tabel,
  2. membedakan fungsi BEFORE dan AFTER trigger,
  3. membedakan event INSERT, UPDATE, dan DELETE sebagai pemicu trigger,
  4. menggunakan OLD dan NEW untuk mengakses nilai sebelum dan sesudah perubahan data,
  5. membuat trigger sederhana untuk memodifikasi nilai sebelum data disimpan,
  6. membuat trigger untuk mencatat perubahan data ke tabel lain,
  7. menampilkan trigger yang sudah dibuat dengan SHOW TRIGGERS,
  8. menghapus trigger dengan DROP TRIGGER,
  9. 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_name adalah nama trigger,
  • trigger_time adalah waktu aktivasi trigger,
  • trigger_event adalah event yang memicu trigger,
  • table adalah tabel yang diasosiasikan dengan trigger,
  • FOR EACH ROW berarti trigger dijalankan untuk setiap baris yang terpengaruh,
  • trigger_body adalah 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 TimePenjelasan
BEFOREtrigger dijalankan sebelum perubahan data benar-benar dilakukan
AFTERtrigger dijalankan setelah perubahan data selesai dilakukan

Secara umum:

  • BEFORE cocok digunakan untuk memvalidasi atau memodifikasi nilai sebelum disimpan,
  • AFTER cocok 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 EventPenjelasan
INSERTtrigger aktif ketika baris baru ditambahkan ke tabel
UPDATEtrigger aktif ketika baris pada tabel dimodifikasi
DELETEtrigger aktif ketika baris pada tabel dihapus

Catatan penting:

  • INSERT dapat dipicu oleh INSERT, LOAD DATA, atau REPLACE,
  • DELETE dapat dipicu oleh DELETE dan REPLACE,
  • DROP TABLE dan TRUNCATE TABLE tidak mengaktifkan trigger DELETE.

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_time dan trigger_event yang sama,
  • artinya, satu tabel tidak dapat memiliki dua buah BEFORE UPDATE trigger,
  • tetapi satu tabel masih bisa memiliki BEFORE UPDATE dan AFTER UPDATE sekaligus.

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.

KeywordDigunakan untuk
OLD.nama_kolomnilai kolom sebelum data diupdate atau dihapus
NEW.nama_kolomnilai kolom yang akan dimasukkan atau nilai kolom setelah diupdate

Secara umum:

  • pada INSERT, yang digunakan adalah NEW,
  • pada DELETE, yang digunakan adalah OLD,
  • 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 salary bernilai NULL atau 0, maka salary diubah menjadi 1000,
  • 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.