1. Latar Belakang
Memasuki minggu kelima pembelajaran di Perwira Learning Center, kita akan membahas topik yang lebih advanced: Database Trigger. Selama ini kita fokus pada logika di backend (Node.js/Express). Tapi tahukah kamu bahwa database juga bisa menjalankan logika sendiri?
Ibarat restoran:
- Backend = Koki yang masak sesuai pesanan
- Database = Dapur tempat nyimpen bahan
- Trigger = Kulkas pintar yang otomatis kurangi stok kalau ada bahan diambil!
Trigger memungkinkan database untuk "berpikir" dan bertindak secara otomatis tanpa perlu menunggu perintah dari backend. Ini penting karena:
- Menjaga konsistensi data
- Mengurangi beban backend
- Memastikan aturan bisnis selalu dijalankan
- Membuat audit trail otomatis
Sebelum lanjut ke pembahasannya, kalian bisa download, atau pull project database saya yang ada di github melalui link berikut ini
2. Alat dan Bahan
a. Perangkat Lunak
- MySQL / PostgreSQL - Database
- phpMyAdmin / pgAdmin - Tools untuk manage database
- VS Code - Untuk menulis query SQL
- Terminal - Untuk menjalankan perintah
b. Perangkat Keras
- Laptop/PC dengan spesifikasi standar
3. Pembahasan
3.1 Apa Itu Trigger?
Trigger adalah prosedur otomatis yang dijalankan oleh database sendiri ketika terjadi kejadian tertentu (INSERT, UPDATE, DELETE) pada tabel tertentu. Trigger "terpicu" secara otomatis dan menjalankan serangkaian perintah SQL.
Bahasa Gampangnya:
-- Biasanya:
Aplikasi → INSERT ke tabel → Selesai
-- Dengan Trigger:
Aplikasi → INSERT ke tabel → 🔥 TRIGGER NYALA!
→ Database otomatis ngelakuin sesuatu
→ Contoh: ngurangin stok, nyatet log, dll3.2 Analogi Dengan Database
| Analogi | Trigger di Database plc_trigger_practice |
|---|---|
| Kasir di minimarket | Setiap ada order baru (INSERT ke orders), otomatis stok di products berkurang |
| CCTV di mall | Setiap ada perubahan gaji (UPDATE di karyawan), otomatis terekam di log_gaji |
| Sensor stok gudang | Setiap stok menipis (<5), otomatis buat notifikasi di notifikasi |
| Petugas perpustakaan | Setiap buku dipinjam (INSERT ke peminjaman), otomatis stok di buku berkurang |
3.3 Komponen Utama Trigger
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ EVENT │───▶│ TRIGGER │───▶│ ACTION │
│ (Kejadian) │ │ (Pemicu) │ │ (Tindakan) │
└──────────────┘ └──────────────┘ └──────────────┘1. EVENT (Kejadian)
Apa yang memicu trigger? Bisa berupa:
- INSERT → Ada data baru masuk (contoh: order baru, peminjaman baru)
- UPDATE → Ada data yang diubah (contoh: perubahan gaji, pengembalian buku)
- DELETE → Ada data yang dihapus
2. TIMING (Waktu Eksekusi)
Kapan trigger dijalankan?
- BEFORE → Dijalankan SEBELUM perubahan terjadi (buat validasi)
- AFTER → Dijalankan SESUDAH perubahan terjadi (buat logging, update stok)
3. ACTION (Tindakan)
Apa yang dilakukan trigger?
- Menjalankan perintah SQL (
UPDATE,INSERT,DELETE) - Memodifikasi data yang akan masuk (kalo BEFORE trigger)
- Membatalkan operasi dengan
SIGNAL SQLSTATE
3.4 BEFORE vs AFTER Trigger
Perbandingan Lengkap:
| Aspek | BEFORE TRIGGER | AFTER TRIGGER |
|---|---|---|
| Waktu | Sebelum data berubah | Setelah data berubah |
| Bisa batalkan? | Bisa (dengan SIGNAL) | Tidak bisa |
| Contoh di DB saya | cek_stok_sebelum_order | kurangi_stok_saat_order |
| Akses data | Bisa akses NEW (data baru) | Bisa akses NEW dan OLD |
| Use case | Validasi, cek stok, hitung otomatis | Audit trail, logging, update stok |
Contoh Implementasi:
3.5 Kenapa Harus Pakai Trigger?
Alasan 1: Menjaga Integritas Data
Trigger memastikan data selalu konsisten meskipun diakses dari berbagai aplikasi.
Contoh Kasus: Stok Barang di E-Commerce
Alasan 2: Audit Trail Otomatis
Setiap perubahan data otomatis tercatat untuk keperluan monitoring dan keamanan.
Contoh Kasus: Riwayat Gaji Karyawan
Alasan 3: Validasi Kompleks
Aturan bisnis yang rumit bisa dijalankan langsung di database.
Contoh Kasus: Aturan Penggajian
Alasan 4: Otomatisasi Tugas Repetitif
Hal-hal yang harus dilakukan SETIAP KALI ada perubahan bisa diotomatisasi.
Contoh Kasus: Update Timestamp
Alasan 5: Konsistensi Lintas Aplikasi
Kalau database-mu dipake banyak aplikasi (web, mobile, API, dll), trigger memastikan aturan tetap jalan di mana-mana.
┌──────────────┐
│ Web App │
└──────┬───────┘
│
┌──────▼───────┐ ┌──────────────────┐
│ Mobile App │───▶│ DATABASE │───▶ TRIGGER JALAN!
└──────┬───────┘ └──────────────────┘
│
┌──────▼───────┐
│ API │
└──────────────┘
✅ SEMUA aplikasi kena efek trigger!
✅ Gak ada yang bisa "lupa" jalankan aturan!3.6 Ilustrasi Lengkap: Semua Trigger di Database Kita
A. Siklus E-Commerce (products, orders, log_stok, notifikasi)B. Siklus Karyawan (karyawan, log_gaji)
C. Siklus Perpustakaan (buku, peminjaman, log_peminjaman)
3.7 Daftar Lengkap Trigger di Database plc_trigger_practice
No
Nama Trigger
Table
Event
Timming
Fungsi
1
cek_stok_sebelum_order
orders
INSERT
BEFORE
Cek stok cukup, hitung total harga
2
kurangi_stok_saat_order
orders
INSERT
AFTER
Kurangi stok, update terjual, catat log
3
peringatan_stok_menipis
products
UPDATE
AFTER
Buat notifikasi jika stok <5 atau 0
4
cek_karyawan_sebelum_insert
karyawan
INSERT
BEFORE
Validasi gaji minimal, umur minimal
5
validasi_gaji_sebelum_update
karyawan
UPDATE
BEFORE
Validasi kenaikan 20%, gaji vs direktur
6
catat_perubahan_gaji
karyawan
UPDATE
AFTER
Catat perubahan gaji/jabatan ke log
7
cek_stok_buku_sebelum_pinjam
peminjaman
INSERT
BEFORE
Cek stok buku, set tgl_pinjam otomatis
8
kurangi_stok_buku_saat_pinjam
peminjaman
INSERT
AFTER
Kurangi stok buku, catat log peminjaman
9
validasi_pengembalian_buku
peminjaman
UPDATE
BEFORE
Validasi tgl kembali >= tgl pinjam
10
tambah_stok_buku_saat_kembali
peminjaman
UPDATE
AFTER
Tambah stok buku, catat log pengembalian
11
update_timestamp_products
products
UPDATE
BEFORE
Auto-update updated_at
3.8 Keuntungan dan Kekurangan Trigger
C. Siklus Perpustakaan (buku, peminjaman, log_peminjaman)
3.7 Daftar Lengkap Trigger di Database plc_trigger_practice
| No | Nama Trigger | Table | Event | Timming | Fungsi |
|---|---|---|---|---|---|
| 1 |
|
orders | INSERT | BEFORE | Cek stok cukup, hitung total harga |
| 2 |
|
orders | INSERT | AFTER | Kurangi stok, update terjual, catat log |
| 3 |
|
products | UPDATE | AFTER | Buat notifikasi jika stok <5 atau 0 |
| 4 |
|
karyawan | INSERT | BEFORE | Validasi gaji minimal, umur minimal |
| 5 |
|
karyawan | UPDATE | BEFORE | Validasi kenaikan 20%, gaji vs direktur |
| 6 |
|
karyawan | UPDATE | AFTER | Catat perubahan gaji/jabatan ke log |
| 7 |
|
peminjaman | INSERT | BEFORE | Cek stok buku, set tgl_pinjam otomatis |
| 8 |
|
peminjaman | INSERT | AFTER | Kurangi stok buku, catat log peminjaman |
| 9 |
|
peminjaman | UPDATE |
BEFORE | Validasi tgl kembali >= tgl pinjam |
| 10 |
|
peminjaman | UPDATE | AFTER | Tambah stok buku, catat log pengembalian |
| 11 |
|
products | UPDATE | BEFORE | Auto-update updated_at |
3.8 Keuntungan dan Kekurangan Trigger
KEUNTUNGAN:
| No | Keuntungan | Contoh di Database Kita |
|---|---|---|
| 1 | Otomatis | Jalan sendiri, gak perlu kode backend |
| 2 | Konsisten | Aturan stok, gaji, peminjaman berlaku untuk semua aplikasi |
| 3 | Cepat | Eksekusi di level database, tanpa network latency |
| 4 | Aman | Gak bisa "dilewati" oleh aplikasi manapun |
| 5 | Audit Trail | Semua perubahan gaji dan peminjaman tercatat otomatis |
| 6 | Data Integrity | Stok gak bakal minus, gaji sesuai aturan |
KEKURANGAN:
| No | Kekurangan | Penjelasan |
|---|---|---|
| 1 | Hidden Logic | Logika tersembunyi di database, perlu didokumentasi |
| 2 | Debugging Sulit | Error di trigger susah dilacak |
| 3 | Performa | Bisa bikin lambat kalo terlalu banyak |
| 4 | Portability | Sintaks trigger beda tiap database |
| 5 | Cascading Effect | Satu trigger bisa picu trigger lain |
3.8 Kapan Pakai Trigger? (Guidelines)
| PAKAI TRIGGER KALO... | JANGAN PAKAI TRIGGER KALO... |
|---|---|
| Mau audit trail otomatis (log_gaji, log_peminjaman) | Logika bisnis yang kompleks dan sering berubah |
| Mau jaga konsistensi data (stok gak boleh minus) | Butuh integrasi dengan sistem eksternal (API, email) |
| Aturan sederhana yang universal (validasi gaji) | Aturan yang beda-beda tiap aplikasi |
| Gak bisa dihandle di aplikasi (karena banyak app) | Butuh komunikasi ke user (notifikasi realtime) |
| Mau prevent invalid data (cegah stok minus) | Logika yang butuh data dari luar database |
4. Latihan Praktikum
Exercise 1: Trigger Sederhana
Buat database perpustakaan dengan tabel:
buku(id, judul, penulis, stok)peminjaman(id, buku_id, anggota, tgl_pinjam, tgl_kembali)
Buat trigger yang:
- Otomatis kurangi stok buku saat ada peminjaman baru
- Otomatis tambah stok buku saat buku dikembalikan
- Cek stok sebelum peminjaman (jangan sampai minus)
Exercise 2: Audit Trail
Buat tabel log_peminjaman dan trigger yang mencatat:
- Siapa yang pinjam
- Buku apa
- Kapan pinjam
- Kapan kembali
Exercise 3: Validasi
Buat trigger yang mencegah:
- Peminjaman buku yang stoknya 0
- Pengembalian dengan tanggal yang lebih kecil dari tanggal pinjam
5. Daftar Pustaka
- MySQL Documentation (n.d.). 27.3.1 Trigger Syntax and Examples. https://dev.mysql.com
- MYSQL Tutorial (n.d.). MySQL Triggers. https://www.mysqltutorial.org
- Devart (n.d.). Triggers in MySQL: Definition and How to Use them. https://www.devart.com
- GeeksforGeeks (2025). SQL Create Trigger. https://www.geeksforgeeks.org
- W3Resource (2022). MySQL Triggers. https://www.w3resource.com




.png)
.png)
.png)
.png)
.png)
0 Komentar