Belajar Trigger SQL: Dari AFTER INSERT Sampai BEFORE RAISE
Belajar Trigger SQL: Dari AFTER INSERT Sampai BEFORE RAISE
Disusun Oleh
Fiqa Khairunisa
NPM 24781102
Kelas: Manajemen Informatika 4D
Tanggal Pengumpulan: 14 Mei 2026
PROGRAM STUDI MANAJEMEN INFORMATIKA
Jurusan teknologi Infromasi
Politeknik Negeri Lampung
Minggu ini di mata kuliah Pemrograman SQL II, saya mempelajari materi yang cukup menarik yaitu Trigger. Sebelumnya saya hanya tahu bahwa trigger itu semacam "pemicu" di database, tapi ternyata setelah praktikum ini saya baru benar-benar paham cara kerjanya dan betapa bergunanya fitur ini dalam pengelolaan database.
Apa Itu Trigger?
Trigger adalah objek database yang bekerja secara otomatis ketika ada operasi DML (Data Manipulation Language) seperti INSERT, UPDATE, atau DELETE yang terjadi pada sebuah tabel. Bedanya dengan query biasa, trigger tidak perlu dipanggil secara manual — dia aktif sendiri ketika kondisi yang sudah ditentukan terpenuhi.
Bayangkan kamu punya toko online dan setiap ada pesanan baru, kamu mau otomatis mencatat log aktivitasnya. Nah, trigger inilah solusinya. Tanpa trigger, kamu harus menulis perintah pencatatan itu di setiap bagian kode aplikasi yang melakukan INSERT. Dengan trigger, cukup buat sekali dan dia akan jalan otomatis selamanya.
Jenis-Jenis Trigger yang Dipelajari
Di praktikum ini saya mempelajari beberapa jenis trigger yaitu AFTER INSERT, AFTER UPDATE, AFTER DELETE, trigger kondisional dengan WHEN, BEFORE trigger untuk validasi, hingga trigger yang berisi banyak perintah sekaligus (multi-statement).
Contoh 1: AFTER INSERT untuk Audit
Trigger ini digunakan untuk mencatat setiap data baru yang masuk ke tabel. Berikut contoh trigger AFTER INSERT pada tabel mahasiswa di MySQL:
DELIMITER $$
CREATE TRIGGER trg_audit_ins_nama
AFTER INSERT ON mahasiswa
FOR EACH ROW
BEGIN
INSERT INTO audit_log(aksi, tabel_target, ref_key, nilai_baru)
VALUES ('INSERT', 'mahasiswa', NEW.npm, NEW.nama);
END$$
DELIMITER ;
Trigger di atas otomatis mencatat ke tabel audit_log setiap kali ada mahasiswa baru yang diinsert. Kolom NEW.npm dan NEW.nama digunakan untuk mengakses nilai yang baru saja dimasukkan.
Contoh 2: BEFORE UPDATE untuk Validasi
Trigger jenis ini berguna untuk memvalidasi data sebelum perubahan disimpan. Jika data tidak memenuhi syarat, trigger akan membatalkan operasi:
DELIMITER $$
CREATE TRIGGER trg_blok_ipk_turun
BEFORE UPDATE ON mahasiswa
FOR EACH ROW
WHEN (NEW.ipk < OLD.ipk)
BEGIN
SELECT RAISE(ABORT, 'IPK tidak boleh turun');
END$$
DELIMITER ;
Trigger ini menolak UPDATE jika IPK baru lebih kecil dari IPK lama. Jadi tidak ada yang bisa "menurunkan" IPK mahasiswa secara tidak sengaja maupun disengaja.
Perbedaan MySQL vs SQL Server
Salah satu hal yang paling membuat saya bingung di awal adalah perbedaan sintaks antara MySQL (di simulator) dan SQL Server (di SSMS). Ternyata perbedaannya cukup signifikan:
Di MySQL, kita menggunakan NEW.kolom dan OLD.kolom untuk mengakses nilai baru dan lama. Sedangkan di SQL Server, kita menggunakan tabel virtual inserted (untuk nilai baru) dan deleted (untuk nilai lama). Selain itu, MySQL mendukung BEFORE trigger secara langsung, sementara SQL Server menggunakan INSTEAD OF sebagai penggantinya.
Refleksi Pribadi
Hal yang paling sulit bagi saya dalam praktikum ini adalah memahami bagaimana cara kerja trigger kondisional dengan klausa WHEN. Di simulator MySQL, ternyata IF dan WHEN tidak selalu bisa digunakan langsung di dalam body trigger, sehingga saya harus menggunakan trik SELECT ... WHERE tanpa FROM sebagai pengganti kondisi. Ini sempat membuat saya frustasi karena sudah mencoba berkali-kali dengan berbagai variasi syntax tapi hasilnya tetap sama.
Selain itu, saya juga sempat kesulitan dengan fungsi concat string. Awalnya saya menggunakan operator || untuk menggabungkan string karena terbiasa dengan sintaks tersebut, namun ternyata MySQL lebih tepat menggunakan fungsi CONCAT().
Tips yang sangat membantu saya selama praktikum ini adalah selalu memperhatikan detail kecil seperti tanda kutip pada nilai string, kelengkapan keyword seperti FOR EACH ROW, dan AFTER/BEFORE. Kesalahan kecil pada hal-hal tersebut bisa menyebabkan trigger gagal dibuat atau tidak berjalan sesuai harapan. Selain itu, membaca pesan error dengan teliti juga sangat membantu dalam menemukan letak kesalahan dengan lebih cepat.
Secara keseluruhan, praktikum trigger ini membuka wawasan saya bahwa banyak logika bisnis yang sebaiknya diimplementasikan di level database, bukan hanya di level aplikasi. Dengan trigger, integritas data bisa terjaga secara konsisten tanpa bergantung pada siapapun yang mengakses database.
Komentar
Posting Komentar