Modul 6 Trigger
Modul 6 Trigger
MODUL VI
TRIGGER
A. TUJUAN
➢ Memahami konsep dasar trigger di dalam basis data.
➢ Memahami implementasi trigger sebagai bentuk respon atas suatu kejadian.
➢ Mampu menyelesaikan kasus-kasus manipulasi data yang kompleks dengan
memanfaatkan trigger
B. PETUNJUK
√ Awali setiap aktivitas dengan do’a, semoga berkah dan mendapat kemudahan.
√ Pahami tujuan, dasar teori dan latihan-latihan praktikum dengan baik dan benar.
√ Kerjakan tugas-tugas praktikum dengan baik, sabar dan jujur.
√ Tanyakan kepada asisten/ dosen apabila ada hal-hal yang kurang jelas.
C. DASAR TEORI
1. Trigger
Trigger dapat didefinisikan sebagai himpunan kode (prosedural) yang
dieksekusi secara otomatis sebagai respon atas suatu kejadian berkaitan
dengan tabel basis data. Kejadian (event) yang dapat membangkitkan trigger
umumnya berupa pernyataan INSERT, UPDATE dan DELETE.
Trigger juga merupakan store procedure yang dijalankan secara otomatis
saat user melakukan modifikasi data pada tabel. Modifikasi data yang dilakukan
pada tabel yaitu berupa perintah INSERT, UPDATE, DELETE. Perintah tersebut
bisa digabung jadi satu trigger yang dinamakan Multiple Trigger. Ada beberapa
event yang bisa kita gunakan untuk mengeksekusi trigger yaitu:
● BEFORE INSERT - dijalankan ketika data dimasukkan ke dalam table
● AFTER INSERT - dijalankan setelah data masuk ke dalam table.
● BEFORE UPDATE - dijalankan sebelum proses update data.
● AFTER UPDATE - dijalankan setelah proses update data.
● BEFORE DELETE - dijalankan sebelum proses delete data.
● AFTER DELETE - dijalankan setelah proses delete data.
D. LATIHAN
Dalam latihan ini digunakan dua buah tabel bernama barang dan pembelian
dengan struktur seperti berikut :
CREATE TABLE barang (
id_brg varchar (5) NOT NULL,
nama_brg varchar (10) NOT NULL,
stok int(5) NOT NULL,
PRIMARY KEY (id_brg)
)
Data yang digunakan adalah sebagai berikut (sesuaikan agar sama persis) :
Tabel Barang
id_brg Nama_brg stok
A10 Mouse 10
A11 Keyboard 15
A12 DVD-RW 10
Tabel Pembelian
id_pem Id_brg jml_beli
1 A10 5
1. Menggunakan Trigger
Operasi-operasi berkenaan dengan pendefinisian trigger tidak berbeda dengan
objek-objek database lainnya.
A. Sebelum membuat trigger, langkah pertama yang harus kalian lakukan
adalah membuat database --> lalu buat tabel barang dan tabel pembelian
--> lalu klik struktur pada tabel barang hingga mncul sperti ini:
Atau jika kalian mnuliskannya pada editor teks yaitu sperti berikut:
DELIMITER //
END //
Pernyataan diatas memiliki arti untuk menambah nilai stok dengan nilai satu
setiap kali ada penambahan data baru.
E. Eksekusi file trigger (sesuaikan path lokasinya).
F. Berikan perintah untuk menambah data baru pada tabel barang, misalnya
seperti berikut:
G. Periksa hasilnya:
DELIMITER //
CREATE TRIGGER updateStok
AFTER INSERT ON pembelian
UPDATE barang
SET stok = stok + NEW.jml_beli
WHERE id_brg = NEW.id_brg;
END//
Pada contoh diatas, penambahan data pembelian akan mengakibatkan nilai stok
barang berubah menyesuaikan banyaknya nilai jumlah pembelian.
10 + 10 = 20
Untuk kasus trigger DELETE, keyword yang bisa digunakan hanya OLD. Misalkan
kita ingin mendefinisikan trigger untuk menghapus semua data pembelian
manakala data barang yang sesuai diindikasikan melalui primary key dan
foreign key dihapus.
DELIMITER //
END//
Khusus untuk operasi UPDATE, kita bisa memanfaatkan keyword NEW maupun
OLD.
DELIMITER //
UPDATE barang
SET stok = stok + (NEW.jml_beli = OLD.jml_beli)
WHERE.id_brg = NEW.id_brg;
END//
3. 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 penambahan data barang. Skenarionya, jika data sudah
ada, berikan status eksistensi barang; sebaliknya, data bisa langsung
dimasukkan.
DELIMITER//
CREATE TRIGGER auditBarang
BEFORE INSERT ON barang
FOR EACH ROW BEGIN
IF NOT EXISTS (SELECT id_brg FROM barang WHERE id_brg = NEW.id_brg)
THEN
SET NEW.nama_brg = NEW.nama_brg, NEW.stok = NEW.stok;
ELSE
SET @status = CONCAT(‘id’, NEW.id_brg, ‘sudah ada’);
END IF;
END//
E. TUGAS PRAKTIKUM
1. Modifikasi trigger INSERT pembelian untuk menambahkan fitur pemberian bonus.
Skenarionya, jika pembelian lebih dari 150 dan kurang dari 250, bonus 15;
pembelian lebih dari 250 dan kurang dari 350, bonus 25; pembelian lebih dari 350,
bonus 50. Ingat, untuk aturan penyesuaian stok barang juga masih berlaku!
2. Buat tabel pembayaran dengan field id_pem dan jumlah, kemudian tambahkan
field harga di tabel barang. Modifikasi trigger INSERT pembelian untuk
menambahkan fitur penghitungan nota pembayaran. Misalkan harga satuan barang
A adalah Rp. 2000, dan terjadi pembelian 15 barang, maka jumlah pembayaran
tercatat Rp. 30000. Ingat, aturan penyesuaian stok barang dan juga pemberian
F. TUGAS RUMAH
1. Buat tabel siswa dengan field nis, nama, dan status serta tabel daftarnilai
dengan field nis dan nilai. Selanjutnya, definisikan trigger pada tabel daftarnilai,
sehingga saat melakukan INSERT dan UPDATE pada tabel daftarnilai, field status
akan otomatis terisi “LULUS” atau “TIDAK LULUS” dengan ketentuan apabila
nilai<75 dinyatakan tidak lulus.
2. Buatlah dua tabel dosen_pa(field: id_pa, nama_pa, jml_mhs) dan
mahasiswa(field: nim, nama, id_pa). Kemudian buatlah trigger pada tabel
mahasiswa untuk menghitung jumlah mahasiswa yang dibimbing oleh
masing-masing dosen pa. Skenarionya, ketika terjadi INSERT, UPDATE dan DELETE
pada tabel mahasiswa, field jml_mhs pada tabel dosen_pa akan terupdate secara
otomatis.
Tabel dosen_pa
id_pa nama_pa jml_mhs
001 Triyanna Widiyaningtyas, S.T., M.T. 3
002 Utomo Pujianto, S.Kom., M.Kom. 2
003 M. Zainal Arifin, S.Si., M.Kom. 1
004 Didik Dwi Prasetya, S.T., M.T 0
005 Drs. Wahyu Sakti G. I., M.Kom. 0
Tabel mahasiswa
nim nama id_pa
150571 Mudafiq 001
150572 Fitrika 003
150573 Charisma 002
150574 Ivan 001
150575 Adam 002
150576 Irma 001
3. Terdapat 3 tabel mhs, mk dan nilaimhs dengan data seperti dibawah ini:
Tabel mhs:
nim nama ip
101 Andi 3.25
102 Rahmat 0.0
103 Bayu 0.0
Tabel mk:
kode_mk nama_mk sks
PTI447 Praktikum Basis Data 1
TIK342 Praktikum Basis Data 1
PTI333 Basis Data Terdistribusi 3
TIK123 Jaringan Komputer 2
TIK333 Sistem Operasi 3
PTI123 Grafika Multimedia 3
PTI777 Sistem Informasi 2
Tabel nilaimhs:
nim kode_mk nilai_abjad
101 PTI447 A
101 PTI123 B
Buatlah trigger untuk tabel nilaimhs agar jika terdapat INSERT, UPDATE dan DELETE
pada tabel nilaimhs, maka data pada field ip di tabel mhs secara otomatis
terupdate.
Dimana, bobot =
Jika Nilai Abjad “A” = sks x 4 Jika Nilai Abjad “C” = sks x 2
Jika Nilai Abjad “B” = sks x 3 Jika NIlai Abjad “D” = sks x 1
Selamat Mengerjakan!