Trigger
Trigger merupakan sebuah perintah atau event yang dapat memicu perubahan sebuah basis
data. Event yang dapat digunakan yaitu memasukkan (insert), perubahan (update), dan
penghapusan (delete). Event-event tersebut ditambahkan sebuah kata kunci pemicu yang di dalam
trigger terdapat dua buah kata kunci yaitu before dan after. Before dilakukan sebelum sebuah
perintah (insert, update, atau delete) dilaksanakan. Sedangkan after dilakukan setelah sebuah
perintah (insert, update, atau delete) dilaksanakan. Tabel 1 berikut adalah penjelasan tentang
perintah yang ada pada trigger.
Tabel 1
Perintah dalam Trigger
No Perintah Keterangan
1 BEFORE INSERT Trigger berjalan sebelum perintah insert
dilaksanakan.
2 AFTER INSERT Trigger berjalan setelah perintah insert
dilaksanakan.
3 BEFORE UPDATE Trigger berjalan sebelum perintah update
dilaksanakan.
4 AFTER UPDATE Trigger berjalan setelah perintah update
dilaksanakan.
5 BEFORE DELETE Trigger berjalan sebelum perintah delete
dilaksanakan.
6 AFTER DELETE Trigger berjalan setelah perintah delete
dilaksanakan.
Untuk lebih memahami tentang trigger, berikutnya Anda akan mencoba dalam MySQL
melalui halaman phpmyadmin. Dalam menjalankan trigger tentunya harus ada beberapa tabel yang
telah dibuat. Perhatikan tabel-tabel yang ada pada kasus rumah sakit yang telah dibuat sebelumnya
pada Modul 6. Gambar 25 adalah gambar entity relationship diagram (ERD) pada contoh kasus
rumah sakit yang telah dibuat sebelumnya.
Gambar 25
Erd Kasus Rumah Sakit pada Halaman Phpmyadmin
Dari ERD kasus tersebut, Anda tambahkan 2 tabel baru yaitu tabel obat dan transaksi_obat
dengan rincian sebagai berikut.
Tabel 2
Membuat Tabel Obat dan Tabel Transaksi_Obat
Tabel Atribut SQL
Tabel obat : id_obat (primary key int 3), CREATE TABLE obat ( id_obat
kode_obat (varchar 5), INT(6) AUTO_INCREMENT
nama_obat (var char 30), PRIMARY KEY,
harga (int 10), stok (int 5) kode_obat VARCHAR(5),
nama_obat VARCHAR(30),
harga integer(10),
stok integer(5)
)
Tabel transaksi_obat : id_transaksi (primary key CREATE TABLE transaksi_obat (
int 5), id_pasien (int 3), id_transaksi int(3)
id_obat (int 3), jumlah (int AUTO_INCREMENT PRIMARY
10), total_harga (int 10) KEY,
id_pasien INT(3),
id_obat INT(3),
jumlah int(10),
total_harga int(10)
)
Silahkan Anda masukan kode SQL untuk membuat tabel pada menu SQL pada basis data
rumah sakit sehingga hasilnya dapat anda lihat pada Gambar 9.26.
Gambar 26
Penambahan 2 Tabel pada Basis Data Rumah Sakit
Kemudian kedua tabel tersebut relasikan dengan tabel yang lainnya dengan cara
klik menu designer → kemudian klik show / hide table list
→ ceklist seluruh tabel sehingga kedua tabel yang telah dibuat siap untuk direlasikan
dengan tabel yang lainnya. Lihat Gambar 27 berikut ini.
Gambar 27
Menambahkan 2 Tabel pada ERD
Selanjutnya adalah melakukan relasi dengan tabel yang telah ada yaitu antara tabel pasien, tabel
transaksi, dan tabel obat. Lihat Gambar 28 berikut.
Gambar 28
Entity Relationship Diagram Kasus Rumah Sakit
Dalam Gambar 28 terlihat tabel obat dan tabel transaksi_obat telah berelasi. Maka selanjutnya
dalam mencoba perintah trigger ini akan fokus pada ketiga tabel yaitu tabel pasien, tabel
transaksi_obat, dan tabel obat. Namun, sebelum melanjutkan praktikum alangkah lebih baik diisi
terlebih dahulu tabel obat minimal 3 data. Misal hasil pengisian tabel obat seperti Gambar 29 berikut
ini.
Gambar 29
Contoh Data Tabel Obat
Perhatikan contoh kasus berikut ini untuk mencoba menjalankan trigger.
Misalnya seorang pasien membeli obat Amoxillin sebanyak 5
buah. Maka ketika tabel transaksi_obat pada atribut jumlah
dimasukan data, maka secara otomatis stok pada tabel obat
akan berkurang.
Dari contoh kasus di atas dapat dibuat sebuah perintah trigger sebagai berikut.
Gambar 30
Perintah Trigger tg_jual
Dari Gambar 9.30 dapat Anda lihat penjelasan pada Tabel 3 sebagai berikut.
Tabel 3
Penjelasan Perintah Trigger dari Gambar 30
Baris Perintah Penjelasan
1 DELIMITER $$ Batas awal sebuah event trigger
2 CREATE TRIGGER tg_jual Membuat trigger dengan nama tg_jual yang akan
AFTER INSERT dijalankan setelah data dimasukan (after insert)
3 ON transaksi_obat Event trigger akan bekerja pada jika ada
perubahan pada tabel transaksi_obat
4 FOR EACH ROW Untuk setiap baris pada tabel transaksi_obat
5 BEGIN Mulai eksekusi perintah SQL
6 UPDATE obat SET stok = Update tabel obat pada atribut stok yaitu dengan
stok - [Link] mengurangi stok dengan data baru pada atribut
jumlah di tabel transaksi_obat
7 WHERE kondisi perubahan yaitu pada id_obat yang baru
id_obat=new.id_obat; diinputkan pada tabel transaksi_obat dengan
id_obat pada tabel obat
8 END $$ Akhir eksekusi perintah SQL
9 DELIMITER ; Batas akhir sebuah event trigger
Jika diterapkan pada halaman phpmyadmin, maka langkah yang dilakukan adalah dengan cara
memasukan langsung kode pada Gambar 30 atau dengan langkah klik menu triggers →
Add trigger → isi data seperti pada Gambar
31 berikut → Go.
Gambar 31
Membuat Trigger tg_jual melalui Menu Triggers
Untuk mencoba menjalankan sebuah trigger ini, Anda perhatikan terlebih dahulu tabel obat pada
Gambar 32.
Gambar 32
Kondisi Tabel Obat
Kemudian Anda coba masukan sebuah data pada tabel transaksi obat. Misalnya
dengan SQL sebagai berikut.
Gambar 33
Memasukkan Data Melalui SQL
Atau melalui halaman phpmyadmin seperti Gambar 34 berikut. (pilih salah satu
cara saja melalui SQL atau melalui halaman phpmyadmin)
Gambar 34
Memasukan Data Melalui Phpmyadmin
Setelah data berhasil dimasukan maka Anda periksa kembali tabel obat. Maka kondisi tabel
obat pada Amoxillin secara otomatis berkurang sebanyak jumlah yang dibeli pasien. Lihat Gambar
35 untuk melihat kondisi tabel obat.
Gambar 35
Kondisi Tabel Obat Setelah Trigger Berjalan
Pada Gambar 29 kondisi stok Amoxillin berjumlah 20. Namun, ada yang membeli obat
tersebut sebanyak 5 pada jumlah di tabel transaksi_obat maka jumlah stok pada amoxillin berkurang
secara otomatis berdasarkan jumlah data yang dimasukan pada tabel transaksi_obat.
Jadi kesimpulan dari trigger adalah sebagai pemicu jika ada perubahan pada baris sebuah tabel
di basis data. Perubahan bisa insert, update, atau delete. Silahkan Anda mencoba trigger pada kasus
lainnya.