Anda di halaman 1dari 33

LAPORAN MODUL VIII

PRAKTIKUM BASIS DATA


“TRIGGER”

Disusun untuk Memenuhi Matakuliah Praktikum Basis Data


Dibimbing oleh Triyanna Widyaningtyas, S.T., M.T.

Oleh:

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
April 2018

• Tujuan Praktikum
• 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.
• Dasar Teori

• Trigger

Definisi Trigger
Trigger adalah batch/sekumpulan perintah yang secara otomatis dikerjakan ketika
terjadi penyisipan (insert), pengubahan (update) atau penghapusan data (delete)
pada sebuah tabel. Trigger adalah sebuah objek database yang di asosiasikan
dengan sebuah tabel dan akan aktif (terpicu/trigger) ketika sebuah event terjadi
pada tabel tersebut Trigger hanya terjadi ketika ada eksekusi INSERT, DELETE,
dan UPDATE pada tabel yang bersangkutan Waktu eksekusi trigger yang
mungkin terjadi terdiri dari 2 yaitu BEFORE dan AFTER dari statement SQLnya.
Implementasi trigger yang sering ditemui dalam dunia nyata adalah untuk
mengeset dan mengubah nilai kolom dalam suatu tabel sehingga validasi nilai dari
tabel tersebut akan terjaga. Adanya trigger dalam database akan meringankan kita
dalam pembuatan aplikasi karena di dalam aplikasi yang kita buat kita tidak perlu
lagi untuk melakukan validasi data.
Jenis Trigger
Ada 2 jenis trigger yaitu :
• Application trigger: Terjadi pada saat sebuah kejadian
terjadi dengan aplikasi tertentu.

• Database trigger : Terjadi pada saat terjadi sebuah


perubahan data seperti DML pada table (INSERT,
UPDATE atau DELETE)

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. Berdasarkan ruang
lingkupnya, trigger diklasifikasikan menjadi dua jenis: row trigger dan statement
trigger. Trigger baris (row) mendefinisikan aksi untuk setiap baris tabel; trigger
pernyataan hanya berlaku untuk setiap pernyataan INSERT, UPDATE, atau
DELETE. Dari sisi perilaku (behavior) eksekusi, trigger dapat dibedakan menjadi
beberapa jenis; namun umumnya ada dua jenis: trigger BEFORE dan AFTER.
Sesuai penamaannya, jenis-jenis ini merepresentasikan waktu eksekusi trigger—
misalnya sebelum ataukah sesudah pernyataan- pernyataan yang
berkorespondensi. Adakalanya trigger dipandang sebagai bentuk spesifik dari
stored procedure (terkait pendefinisian body). Bagaimanapun, trigger akan
dipanggil (secara otomatis) ketika event terjadi, sedangkan stored procedure harus
dipanggil secara eksplisit.

2. Trigger MySQL
MySQL mendukung fitur trigger termasuk juga stored procedure dan view sejak
versi 5.0.2 Sebagaimana objek-objek lainnya, trigger diciptakan menggunakan
pernyataan CREATE. Sintaks pendefinisian trigger diperlihatkan sebagai berikut:

Ada beberapa event yang bisa kita gunakan untuk mengekseskusi triger yaitu :
• BEFORE INSERT – dijalankan ketika data di masukan ke dalam table.
• AFTER INSERT – dijalankan setelah data masuk ke dalam table.
• BEFORE UPDATE – dijalankan sebelum proses update data.
• AFTER UPDATE – dijalankan setelah proses proses update data.
• BEFORE DELETE – dijalankan sebelum proses delete data.
• AFTER DELETE – dijalankan setelah proses delete data.

MySQL tidak mengizinkan multiple trigger dengan waktu aksi dan event sama
per tabel. Misalkan di tabel A sudah didefinisikan trigger AFTER INSERT, maka
kita tidak boleh mendefinisikan trigger AFTER INSERT lagi; namun AFTER
EDIT, AFTER DELETE, atau BEFORE (INSERT, EDIT, dan DELETE) bisa
diterima.

• Tugas Latihan
Pertama sebelum kita mempraktekkan latihan langkah pertama yang kita lakukan
adalah menjalankan XAMPP Control Panel.

Setelah kita membuka XAMPP Control Panel, kita start Apache dan MySQL.
Selanjutnya kita buka phpMyAdmin pada browser dengan mengetikkan
localhost/phpmyadmin/ pada browser kita. Setelah itu maka phpMyAdmin akan
terbuka seperti tampilan dibawh ini.

Gambar diatas merupakan tampilan phpMyAdmin setelah kita membuka


localhost/phpmyadmin/ pada browser. Setelah itu kita akan membuat database engan
nama Modul8. Untuk membuat database kita pilih tab basis data kemudian pada kolom
nama kita ketikkan Modul8 setelah kita beri nama kemudian kita klik buat seperti
gambar dibawah ini.

Selanjutnya setelah kita membuat databsae dengan nama Modul8 selanjutnya kita buat
tabel dengan nama barang dengan jumlah kolom 3 seperti yang terdapat pada Modul
Trigger. Seperti gambar dibawah ini.

Setelah kita mengetikkan nama tabel dengan nama barang kemudian jumlah kolom 3
selanjutnya kita klik buat untuk membuat tabel bareng dengan jumlah kolom 3.
Selanjutnya kita mengisi nama kolom pada tabel barang yang sudah kita buat dengan
id_brg dengan tipe data char dengan batas 3, kemudian nama_brg dengan tipe data
varchar dengan batas 100, kemudian stok dengan tipe data int dengan batas 100 seperti
gambar dibawah ini.

Pada langkah selanjutnya kita mengisi tabel barang tersebut dengan data data yang
terdapat pada Modul Trigger, untuk mengisi field kolom tersebut kita isikan dengan
data seperti yang tertera pada bawah ini.

Source Code :
INSERT INTO ‘barang’ (‘id_brg’, ‘nama_brg’, ‘stok’) VALUES (‘A10’,
‘Mouse’, ‘10’), (‘A11’, ‘Keyboard’, ‘15’), (‘A12’, ‘DVD R-W’, ‘10’)

Pada perintah diatas terdapat perintah INSERT INTO ‘barang’ yang digunakan untuk
menambahkan atau memasukkan pada tabel barang setelah itu perintah tersebut diikuti
dengan perintah (‘id_brg’, ‘nama_brg’, ‘stok’) yang digunakan sebagai kolom yang
akan diisi oleh data, setelah itu diikiti dengan perintah VALUES (‘A10’, ‘Mouse’,
‘10’), (‘A11’, ‘Keyboard’, ‘15’), (‘A12’, ‘DVD R-W’, ‘10’), perintah tersebut
digunakan untuk megisi data pada tabel barang atau isi dari tabel barang. Setelah kita
ketikkan perintah tersebut kemudian kita klik go, kemudian data yang kita inputkan
tersebut akan terlihat seperti gambar dibawah ini.

Pada gambar diatas merupakan hasil dari pengeksekusian perintah yang berada diatas
tadi. Selanjutnya kita akan membuat tabel berikutnya yaitu tabel dengan nama
pembelian yang memiliki jumlah kolom 3.

Setelah kita beri nama dan tentukan jumlah kolomnya, selanjutnya kita klik buat untuk
membuat tabel dengan nama dan jumlah kolom tersebut. Setelah tabel berhasil dibuat
selanjutnya kita beri tabel tersebut kolom dengan nama id_pem dengan tipe data
varchar dengan batas 10, kemudian id_brg dengan tipe data char dengan batas 3,
kemudian jml_beli dengan tipe data int dengan batas berjumlah 100.

Setelah kita berhasil membuat kolom pada tabel pembelian seperti pada gambar diatas.
Selanjutnya kita akan mengisi data pada tabel tersebut dengan data pada Modul
Trigger dengan data seperti pada bawah ini.

Source Code :
INSERT INTO ‘pembelian’ (‘id_pem’, ‘id_brg’, ‘jml_beli’) VALUES (‘1’,
‘A10’, ‘5’);

Pada perintah diatas terdapat perintah INSERT INTO ‘pembelian’ yang digunakan
untuk menambahkan atau memasukkan data pada tabel pembelian, kemudian perintah
tersebut diikuti dengan perintah (‘id_pem’, ‘id_brg’, ‘jml_beli’) sebagai kolom pada
tabel pembelian, selanjutnya diikuti dengan perintah VALUES (‘1’, ‘A10’, ‘5’); yang
berfungsi sebagai isi dari tabel pembelian. Setelah perintah diatas diketikkan dan
dieksekusi maka akan nampak seperti gambar dibawah ini.

Gambar diatas merupakan data dari tabel pembelian. Setelah kita mengisi tabel
pembelian selanjutnya kita akan mempraktekkan latihan latihan.

• Pada latihan pertama ini kita akan mempraktikkan cara untuk menggunakan trigger.
Trigger digunakan untuk memanggil satu atau beberapa perintah yang otomatis
sebelum atau sesudah terjadi proses. Untuk mempraktikkan sesuai yang diperintahkan
maka kita akan memulai mempraktikkannya dengan Masuk kedalam database yang
digunakan untuk menciptakan tabel tadi, kemudian masuk ke menu Trigger. Seperti
gambar dibawah ini.

Langkah selanjutnya setelah kita memilih tab trigger selanjutnya kita akan
menambahkan trigger dengan Add Trigger atau Tambahkan Trigger pada bagian New,
selanjutnya kita isi trigger tersebut sama dengan yang berada pada modul, seperti
gambar dibawah ini.
Pada gambar diatas dapat kita ketahui kita akan memberi nama trigger dengan
inkremenStok2. Selanjutnya kita pilih tabel barang. Setelah itu kita pilih kapan
perintah yang akan diketikkan dieksekusi pada kasus diatas kita pilih BEFORE.
Kemudian pada perintah pada trigger kita ketikkan SET NEW.stok = NEW.stok +1
yang digunakan untuk inkremen data yang ada ditabel barang dan akan dieksekusi saat
sebelum proses. Setelah itu kita akan buat trigger tersebut dengan mengeklik tombol
Kirim atau Go.

Pada gambar diatas menunjukkan bahwa trigger berhasil dibuat. Kemudian setelah
trigger berhasil dibuat langkah selanjutnya adalah menulis perintah pada SQL untuk
menjalankan proses trigger dengan perintah seperti dibawah ini.

Source Code :
INSERT INTO barang VALUES (‘A13’, ‘Modem’, 5)
Pada perintah diatas terdapat INSERT karena pada trigger yang dibuat pada EVENT-
nya menggunakan INSERT. Pada perintah INSERT INTO barang berfungsi untuk
menambahkan tabel pada tabel barang, kemudian perintah tersebut diikuti dengan
perintah VALUES (‘A13’, ‘Modem’, 5) yang digunakan untuk mengisi data pada tabel
barang. Setelah perintah tersebut diketikkan dan dieksekusi maka akan seperti gambar
di bawah ini.

Pada gambar diatas menunjukan bahwa setiap data yang kita insert akan menambah
satu pada stok yang kita insert. Selanjutnya kita akan mempraktikkan untuk
menghapus trigger yang telah dibuat dengan menggunakan DROP atau Hapus pada
trigger yang terlihat seperti gambar dibawah ini.

Untuk melakukan penghapusan tigger seperti gambar diatas kita klik pada tab trigger
kemudian kita klik hapus atau drop pada trigger yang ingin kita hapus.

• Pada nomor 2 ini kita akan mepraktikkan keyword OLD dan NEW. Keyword OLD
mengacu pada nilai lama, sedangkan NEW merepresentasikan nilai baru. t Di trigger
INSERT, kita hanya dapat menggunakan keyword NEW karena tidak adadata lama.
Untuk mempraktikkan keyword OLD dan NEW langkah yang kita lakukan pertama
adalah dengan membuat trigger seperti dibawah ini.
Pada gambar diatas menunjukkan bahwa pada trigger kita beri nama update Stok,
kemudian kita pilih tabel pembelian, kemudian kita pilih waktu pengeksekusian yaitu
AFTER, kemudian kita pilih EVENT-nya yaitu INSERT. Kemudian pada trigger kita
beri perintah/syntax
Source Code :
UPDATE barang
SET stok = stok + NEW.jml_beli
WHERE id_brg = NEW.id_brg

Pada perintah diatas terdapat perintah UPDATE barang yang digunakan untuk
mengupdate data pada tabel barang, setelah itu perintah diikuti dengan SET stok =
stok + NEW.jml_beli dimana berfungsi untuk menyatakan stok = stok +
NEW.jml_beli. Selanjutnya perintah diikuti dengan WHERE id_brg = NEW.id_brg
yang berfungsi untuk menyatakan kondisi dimana id_brg sama dengan =
NEW.id_brg.Setelah itu diketikkan kita buat trigger-nya.
Pada langkah selanjutnya kita diperintahkan untuk menampilkan datanya dengan
perintah di bawah ini.

Source Code :
SELECT * FROM barang

Setelah kita mengetikkan perintah diatas maka tampilan akan seperti gambar di bawah
ini.

Kemudian selanjutnya kita diperintah kan untuk mengetikkan syntax pada SQL yang
tertera seperti pada bawah ini

Source Code :
INSERT INTO pembelian ('id_pem', 'id_brg', 'jml_beli') VALUES ('2',
'A10', '10');

Pada perintah diatas terdapat perintah INSERT INTO pembelian yang berfungsi untuk
menambahkan atau memasukkan data pada tabel pembelian, ('id_pem', 'id_brg',
'jml_beli') merupakan kolom pada tabel pembelian. Kemudian kita lanjutkan dengan
perintah VALUES ('2', 'A10', '10'); yang digunakan untuk mengisikan data pada tabel
pembelian. Selanjutnya setelah dieksekusi maka selanjutnya kita mengetikkan perintah
seperti dibawah ini.

Source Code :
SELECT * FROM barang
Setelah perintah tersebut dieksekusi maka tampilan akan tampak seperti gambar di
bawah ini.
Gambar diatas menunjukkkan pertambahan setelah dituliskan syntax INSERT INTO
pembelian ('id_pem', 'id_brg', 'jml_beli') VALUES ('2', 'A10', '10'); karena pada trigger
setiap kita ketikkan perintah insert maka SET stok = stok + NEW.jml_beli WHERE
id_brg = NEW.id_brg.

• Pada langkah selanjutnya kita akan mempraktikkan trigger DELETE. 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. Untuk itu kita
masuk pada menu trigger dan kita buat trigger baru seperti dibawah ini.

Pada trigger diatas kita beri nama trigger dengan nama deleteChild, kemudian kita pilih
tabel barang, kemudian kita pilih waktu pengeksekusiannya yaitu AFTER, kemudian
kita pilih EVENT-nya yaitu DELETE. Setelah itu kita ketikkan syntax triggernya seperti
yang berada pada bawah ini.

Source Code :

DELETE FROM pembelian

WHERE id_brg = OLD.id_brg


Setelah itu, masuk ke table barang untuk menghapus data dengan mengetikkan perintah
atau syntax seperti yang tertera pada bawah ini.

Source Code :

DELETE FROM barang WHERE id_brg = ‘A10’

Setelah kita mengeksekusi perintah diatas selanjutnya kita cek dengan mengetikkan
perintah seperti dibawah ini

Source Code :

SELECT * FROM pembelian

Setelah perintah diatas dieksekusi maka perintah tersebut akan menampilkan data dari
tabel pembelian yang nampak seperti gambar dibawah ini.

Gambar diatas menunjukkan bahwa tidak ada data yang tersimpan pada tabel pembelian
karena syntax DELETE FROM barang WHERE id_brg = ‘A10’ ini yang menyebabkan
isi dari tabel pembelian terhapus.
• Khusus untuk operasi UPDATE, kita bisa memanfaatkan keyword NEW maupun OLD.
Pada langkah selanjutnya kita buat trigger seperti dibawah ini.

Pada gambar diatas menunjukkan, bahwa kita membuat trigger dengan nama trigger
yaitu updateStokEdit, kemudian kita pilih tablnya yaitu tabel pembelian, kemudian kita
pilih waktu eksekusinya yaitu AFTER, kemudian kita pilih event-nya yaitu UPDATE.
Setelah itu kita isi syntax atau perintah pada trigger yaitu seperti pada bawah ini.

Source Code :

UPDATE barang
SET stok = stok + (NEW.jml_beli – OLD.jml_beli)
WHERE id_brg = NEW.id_brg;

Pada perintah diatas terdapat perintah UPDATE barang yang digunakan untuk
mengupdate pada tabel barang, kemudian perintah tersebut diikuti dengan perintah SET
stok = stok + (NEW.jml_beli – OLD.jml_beli) yang berfungsi untuk mnyatakan ,
kemudian pada WHERE id_brg = NEW.id_brg; digunakan untuk menyatakan kondisi
dimana id_brg = NEW.id_brg. Setelah itu kita buat triggernya. Selanjutnya kita
ketikkan perintah SQL-nya yaitu seperti di bawah ini.
Source Code :

UPDATE pembelian SET jml_beli = 20 WHERE id_pem = 3

Pada perintah diatas terdapat perintah UPDATE pembelian yang digunakan untuk
mengupdate tabel pembelian, kemudian perintah tersebut diikuti dengan perintah SET
jml_beli = 20 yang berfungsi untuk menyatakan jml_beli dengan nilai 20 kemudian
diikuti dengan perintah WHERE id_pem = 3 yang digunakan untuk menyatakan kondisi
dimana id_pem = 3. Setelah perintah tersebut kita eksekusi selanjutnya kita tampilkan
seluruh data dari tabel barang. Dengan perintah seperti pada bawah ini.

Source Code :

SELECT * FROM barang

Setelah perintah diatas diketikkan maka seluruh data pada tabel barang akan ditampilkan
seperti gambar dibawah ini.

Pada gambar diatas menunjukkan data pada tabel barang. id_brg A10 hilang karena pada
perintah sebelumnya berdampak pada penghapusan id_brg A10. Kemudian pada
perintah UPDATE pembelian SET jml_beli = 20 WHERE id_pem = 3 tidak
berpengaruh karena pada tabel pembelian tidak ada id_pem yang bernilai 3.
• 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 pencabangan,
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. Kemudian kita ketikkan perintah
seperti pada bawah ini.

Source Code :

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 //

Pada perintah diatas terdapat perintah DELIMITER // yang digunakan untuk merubah
pembatas kemudian terdapat perintah CREATE TRIGGER auditBarang BEFORE
INSERT ON barang yang berfungsi untuk membuat trigger dengan nama auditBarang
yang waktu eksekusinya BEFORE dengan EVENT INSERT pada tabel barang.
Kemudian perintah dilanjutkan perintah

IF NOT EXISTS (SELECT id brg FROM barang WHERE id_brg = NEW.id_brg) yang
digunkakn untuk menyatakan kondisi jika tidak terdapat pada SELECT id brg FROM
barang dimana id_brg = NEW.id_brg yang selanjutnya SET NEW.nama_brg =
NEW.nama_brg, NEW.stok = NEW.stok yang berfungsi untuk menyatakan bahwa
NEW.nama_brg = NEW.nama_brg dan NEW.stok = NEW.stok jika selain itu maka SET
@status = CONCAT('id', NEW.id_brg, 'sudah ada') yang menyatakan status dengan
CONCAT('id', NEW.id_brg, 'sudah ada') kemudian kita akhiri dengan END IF

• Tugas Praktikum

Sebelum kita melanjutkan ke praktikum langkah yang pertama kita lakukan adalah
dengan membuat tabel dengan nama daftar_obat dengan jumlah kolom 5 yaitu seperti
gambar di bawah ini.
Setelah kita membuat tabel daftar_obat dengan jumlah kolom 5, maka selanjutnya kita
akan membuat kolomnya seperti gambar di bawah ini.

Setelah kita tuliskan nama nama kolomnya selanjutnya kita akan mengsikan data pada
tabel daftar_obat dengan data seperti pada gambar bawah ini.

Source Code :

INSERT INTO `Daftar_Obat` (`kode_obat`, `nama_obat`, `jenis_obat`,


`harga_obat`, `stok_obat`) VALUES ('AG11', 'Ambroxol', 'Tablet',
'2000', '450'), ('AG36', 'Amoxilin', 'Tablet', '1450', '150'), ('AG76',
'Bromhexine', 'Sirup', '3000', '130'), ('BD15', 'Acetosal', 'Kapsul',
'750', '300'), ('BD23', 'Tramadol', 'Kapsul', '2300', '45'), ('BD35',
'Tamoksifen', 'Tablet', '1000', '60'), ('BD45', 'Parasetamol',
'Tablet', '1650', '125'), ('BD65', 'Atropin', 'Sirup', '5500', '30'),
('DB24', 'Cisplatin', 'Kapsul', '750', '200'), ('DB89',
'Dextromethorpan', 'Sirup', '4550', '80');
Pada gambar diatas menunjukkan data sudah diinput pada tabel daftar_obat Setelah kita
mengetikkan atau mengisi data diatas maka selanjutnya kita membuat tabel
pembelian_obat seperti pada bawah ini.

Setelah kita memberi nama tabel dan memberi jumlah kolom maka selanjutnya kita buat
tabel tersebut kemudian kita memberi tabel tersebut dengan nama kolom – kolomnya
dengan nama – nama seperti pada bawah ini.

Setelah kita memberi nama kolom kemudian langkah selanjutnya adalah kita membuat
tabel dengan nama pembayaran obat yang memiliki jumlah kolom 2. Untuk itu maka
kita akan membuat tabel tersebut seperti pada bawah ini.

Setelah kita membari nama tabel dan jumlah kolomnya maka klik buat untuk membuat
tabel tersebut. Setelah tabel tersebut berhasil dibuat maka langkah selanjutnya adalah
dengan membuat atau mengisi nama kolom seperti pada gambar bawah ini.
Pada gambar diatas menunjukkan bahwa kita akan membuat kolom id_pem menjadi
primary key. Setelah semua berhasil dibuat kita bisa melanjutkan pada praktikum.

• Pada praktikum ini kita diperintahkan untuk melakukan pembuatan trigger INSERT
pada table pembelian_obat dan tambahkan fitur untuk mendapatkan harga total
pembelian yang dilakukan oleh customer ke dalam tabel pembayaran_obat. Contoh : jika
obat A = 5000 dan terjadi pembelian sebanyak 2 items, maka jumlah_pem akan tercatat
10000. Untuk melakukan itu kita akan membuat trigger terlebih dahulu yaitu seperti
dibawah ini.

Pada trigger diatas kita beri nama dengan beliObat, kemudian kita pilih tabelnya yaitu
tabel pembelian obat, kemudian kita pilih waktu pengeksekusiannya, kemudian kita pilih
EVENT-nya yaitu INSERT. Setelah itu pada trigger kita beri syntax seperti pada bawah
ini.
Source Code :

BEGIN

INSERT INTO pembayaran_obat

VALUES (NEW.id_pem, NEW.jml_beli * (SELECT harga_obat FROM daftar_obat


WHERE kode_obat = NEW.kode_obat));

END

Pada perintah diatas terdapat perintah BEGIN untuk mengawali trigger selanjutnya pada
INSERT INTO pembayaran_obat digunakan untuk menambahkan dan memasukkan
data pada tabel pembayaran_obat selanjutnya perintah VALUES (NEW.id_pem,
NEW.jml_beli * (SELECT harga_obat FROM daftar_obat WHERE kode_obat =
NEW.kode_obat)); berfungsi untuk mengisi data dengan NEW.id_pem, NEW.jml_beli *
pada SELECT harga_obat FROM daftar_obat dimana kode_obat = NEW.kode_obat.
Setelah perintah diatas diketikkan kemudian klik buat untuk membuat trigger-nya.
Kemudian pada langkah selanjutnya kita insertkan data pada tabel pembayaran_obat
seperti yang tertera pada bawah ini.

Source Code :

INSERT INTO pembelian_obat VALUES ('N20', 'BD15', '50', '2018-03-26')

Pada perintah diatas terdapat perintah INSERT INTO pembelian_obat yang digunakan
untuk memasukkan data pada tabel pembelian_obat kemudian pada VALUES ('N20',
'BD15', '50', '2018-03-26') ini digunakan sebagai data dari tabel pembelian obat. Setelah
perintah tersebut dieksekusi. Maka hasil dari eksekusi tersebut akan nampak seperti
gambar pada bawah ini.

Gambar diatas merupakan hasil eksekusi pada pembelian_obat dari perintah diatas yang
akan berpengaruh pada tabel pembayaran_obat yang akan nampak seperti gambar pada
bawah ini.

Pada gambar diatas merupakan hasil dari eksekusi perintah yang diatas pada tabel
pembayaran_obat.

• Tugas Rumah

• Pada Tugas rumah nomor 1 ini kita diperintahkan untuk Memodifikasi trigger INSERT
dari tabel pembelian_obat untuk menambahkan fitur diskon pada pembayaran, dengan
aturan jika pembelian dilakukan pada hari senin maka akan mendapatkan diskon 10%.
Ingat, aturan penyesuaian stok obat masih berlaku dimana jika terdapat pembelian maka
stok obat akan berubah secara otomatis. Untuk melakukan perintah tersebut maka
langkah yang akan kita lakukan seperti pada bawah ini.

Source Code :

DELIMITER //
CREATE TRIGGER `GodPlan` BEFORE INSERT ON `pembelian_obat`
FOR EACH ROW BEGIN
IF date_format(NEW.tanggal_pem,'%w') = 1
THEN
INSERT INTO pembayaran_obat
SET id_pem = NEW.id_pem,
jml_pem = (NEW.jml_beli*(SELECT harga_obat FROM daftar_obat WHERE
kode_obat = NEW.kode_obat))-(NEW.jml_beli*(SELECT harga_obat FROM
daftar_obat WHERE kode_obat = NEW.kode_obat)*0.1);
UPDATE daftar_obat
SET stok_obat = ((SELECT stok_obat WHERE kode_obat =
NEW.kode_obat) - NEW.jml_beli) WHERE kode_obat = NEW.kode_obat;
ELSE
INSERT INTO pembayaran_obat
SET id_pem = NEW.id_pem,
jml_pem = NEW.jml_beli*(SELECT harga_obat FROM daftar_obat WHERE
kode_obat = NEW.kode_obat);
UPDATE daftar_obat
SET stok_obat = ((SELECT stok_obat WHERE kode_obat =
NEW.kode_obat) - NEW.jml_beli) WHERE kode_obat = NEW.kode_obat;
END IF;
END //

Pada perintah diatas terdapat perintah CREATE TRIGGER `GodPlan` BEFORE


INSERT ON `pembelian_obat` yang digunakan untuk membuat tabel dengan nama
GodPlan dengan waktu pengeksekusian yaitu BEFORE dengan EVENT Insert pada tabel
pembelian_obat. Kemudian IF date_format(NEW.tanggal_pem,'%w') = 1 THEN
INSERT INTO pembayaran_obat yang berfungsi untuk menyatakan kondisi jika
date_format(NEW.tanggal_pem,'%w') = 1 maka INSERT INTO pembayaran_obat.
Kemudian perintah tersebut diikuti dengan perintah SET id_pem = NEW.id_pem,
jml_pem = (NEW.jml_beli*(SELECT harga_obat FROM daftar_obat WHERE
kode_obat = NEW.kode_obat))-(NEW.jml_beli*(SELECT harga_obat FROM
daftar_obat WHERE kode_obat = NEW.kode_obat)*0.1); yang berfungsi untuk
menyatakan id_pem = NEW.id_pem kemudian juga menyatakan jml_pem =
(NEW.jml_beli* pada kolom harga_obat pada tabel daftar_obat dimana kode_obat sama
dengan NEW.kode_obat dikurangi ))-(NEW.jml_beli* pada harga_obat pada tabel
daftar_obat dimana kode_obat = NEW.kode_obat dikali 0.1 sebagai diskon. Kemudian
pada UPDATE daftar_obat

SET stok_obat = ((SELECT stok_obat WHERE kode_obat = NEW.kode_obat) -


NEW.jml_beli) WHERE kode_obat = NEW.kode_obat; berfungsi untuk meyatakan
stok_obat sma dengan ((SELECT stok_obat WHERE kode_obat = NEW.kode_obat) -
NEW.jml_beli) dimana WHERE kode_obat = NEW.kode_obat. Kemudian pada perintah
diatas jika tidak sesuai dengan perintah sebelumnya maka akan menjalankan perintah
jml_pem = NEW.jml_beli*(SELECT harga_obat FROM daftar_obat WHERE kode_obat
= NEW.kode_obat);

UPDATE daftar_obat SET stok_obat = ((SELECT stok_obat WHERE kode_obat =


NEW.kode_obat) - NEW.jml_beli) WHERE kode_obat = NEW.kode_obat;

Selanjutnya kita insert data yang tertera seperti di bawah ini.

Source Code :

INSERT INTO `pembelian_obat` (`id_pem`, `kode_obat`, `jml_beli`,


`tanggal_pem`) VALUES ('N1','BD15','15','2018-3-26');

Pada perintah INSERT INTO `pembelian_obat` digunakan untuk menambah data pada
tabel pembelian_obat. Kemudian diikuti dengan perintah (`id_pem`, `kode_obat`,
`jml_beli`, `tanggal_pem`) yang berfungsi sebagai kolom. Kemudian perintah VALUES
('N1','BD15','15','2018-3-26'); digunakan sebagai isi dari tabel pembelian_obat. Setelah
kita melakukan langkah tersebut maka akan tampak seperti gambar dibawah ini.

Gambar tersebut menunjukkan data pada tabel pembelian_obat. Setelah itu gambar pada
bawah ini merupakan gambar pada tabel pembayaran_obat.
Kemudian gambar dibawah ini merupaka isi dari data pada tabel daftar_obat

• Pada tugas rumah 2 ini kita diperintahkan untuk membuat trigger UPDATE pada table
pembelian_obat, kemudian tambahkan fitur baru dimana jika jumlah_pem pada tabel
pembelian diubah, maka stok pada tabel daftar_obat juga ikut berubah. Contoh :
pembelian obat A sebanyak 10 buah dan stok Obat A adalah 15, maka sisa stok adalah 5
buah. Kemudian data jumlah_pem dari 10 diubah kembali menjadi 5, sehingga stok pada
tabel daftar_obat berubah menjadi 10. Untuk melakukan itu langkah yang akan kita
lakukan yaitu seperti pada bawah ini.

Source Code :

DELIMITER //
CREATE TRIGGER `Fearless` AFTER UPDATE ON `pembelian_obat`
FOR EACH ROW BEGIN
UPDATE daftar_obat
SET stok_obat = (stok_obat + (OLD.jml_beli-NEW.jml_beli)) WHERE
kode_obat = NEW.kode_obat;
END //
Pada perintah diatas terdapat perintah CREATE TRIGGER `Fearless` AFTER UPDATE
ON `pembelian_obat` yang digunakan untuk membuat trigger dengan nama Fearless
dengan waktu pengeksekusiannya AFTER dengan EVENT Update pada tabel
pembelian_obat. Kemudian pada perintah atau syntax trigger yaitu UPDATE daftar_obat
SET stok_obat = (stok_obat + (OLD.jml_beli-NEW.jml_beli)) WHERE kode_obat =
NEW.kode_obat;

yang berfungsi untuk mengupdate pada tabel daftar_obat dengan menyatakan

stok_obat = (stok_obat + (OLD.jml_beli-NEW.jml_beli)) dimana kode_obat =


NEW.kode_obat;. Setelah itu kita lakukan update dengan data seperti pada bawah ini.

Source Code :

UPDATE `pembelian_obat` SET `kode_obat` = 'BD15', `jml_beli`='3',


`tanggal_pem` = '2018-3-26' WHERE `id_pem`='N1';

Pada perintah diatas terdapat perintah UPDATE `pembelian_obat` yang berfungsi untuk
mengupdate tabel pembelian_obat. Kemudian diikuti dengan perintah SET `kode_obat` =
'BD15', `jml_beli`='3', `tanggal_pem` = '2018-3-26' WHERE `id_pem`='N1'; yang
berfungsi untuk menyataka isi dari update.

Gambar diatas merupakan data atau isi dari tabel pembelian_obat setelah pengeksekusian
perintah diatas. Setelah itu gambar dibawah ini merupakan gambar dari tabel daftar_obat
• Buat tabel log_pembelian

Selanjutnya kita membuat trigger di dalam tabel Pembelian untuk merekam operasi
INSERT, UPDATE, DELETE, dan kemudian menyimpan rekaman operasi sebagai bukti
transaksi di tabel log_pembelian.
- Pada INSERT, kita akan memasukkan operasi “Insert” dan menampilkan waktu
operasinya di tabel log_pembelian
Source Code :
DELIMITER //
CREATE TRIGGER Ins
AFTER INSERT ON pembelian_obat
FOR EACH ROW BEGIN
DECLARE stat VARCHAR(25);
SET stat='INSERT';
INSERT INTO log_pembelian (operasi,waktu) VALUES (stat,NOW());
END //
DELIMITER ;

Pada perintah diatas terdapat perintah CREATE TRIGGER Ins


AFTER INSERT ON pembelian_obat yang digunakan untuk membuat trigger dengan
waktu pengeksekusian yaitu AFTER dengan EVENT Insert pada tabel pembelian obat ,
kemudian pada perintah DECLARE stat VARCHAR(25);
SET stat='INSERT'; yang berfungsi untuk mendeklarasikan stat dengan tipe data
VARCHAR dengan batas 25 kemudian kita nyatakan stat = INSERT. Pada
INSERT INTO log_pembelian (operasi,waktu) VALUES (stat,NOW()); digunakan untuk
menambahkan data pada tabel log_pembelian dengan kolom operasi,waktu dengan nilai
pada operasi yaitu stat pada waktu kita beri NOW().
Setelah itu kita menginsert tabel pada tabel pembelian_obat dengan perintah seperti
dibawah ini.

Source Code :
INSERT INTO pembelian_obat VALUES ('A66', 'AG76', '10', '2018-04-01');

Pada perintah diatas terdapat perintah INSERT INTO pembelian_obat yang berfungsi
untuk memasukkan data pada tabel pembelian_obat dengan nilai VALUES ('A66',
'AG76', '10', '2018-04-01');. Seperti pada gambar bawah ini

Pada gambar diatas pada waktu menunjukkan waktu sekarang meskipunyang diinput
waktu lain.
- Pada UPDATE, kita akan memasukkan operasi “Update” dan menampilkan waktu
operasinya di tabel log_pembelian

Source Code :
DELIMITER //
CREATE TRIGGER Upd
AFTER UPDATE ON pembelian_obat
FOR EACH ROW BEGIN
DECLARE stat VARCHAR(25);
SET stat='UPDATE';
INSERT INTO log_pembelian (operasi,waktu) VALUES (stat,NOW());
END //
DELIMITER ;

Pada perintah diatas terdapat perintah CREATE TRIGGER Upd


AFTER UPDATE ON pembelian_obat yang digunakan untuk membuat trigger dengan
waktu pengeksekusian yaitu AFTER dengan EVENT Update pada tabel pembelian obat ,
kemudian pada perintah DECLARE stat VARCHAR(25);
SET stat='UPDATE'; yang berfungsi untuk mendeklarasikan stat dengan tipe data
VARCHAR dengan batas 25 kemudian kita nyatakan stat = UPDATE. Pada INSERT
INTO log_pembelian (operasi,waktu) VALUES (stat,NOW()); digunakan untuk
menambahkan data pada tabel log_pembelian dengan kolom operasi,waktu dengan nilai
pada operasi yaitu stat pada waktu kita beri NOW().

Source Code :
UPDATE pembelian_obat SET jml_beli=15 WHERE id_pem='A66'

Pada perintah diatas terdapat perintah UPDATE pembelian_obat yang berfungsi untuk
mengupdate pada tabel pembelian_obat dengan diikuti perintah SET jml_beli=15
WHERE id_pem='A66' yang berfungsi untuk menyatakan jml_beli = 15 dimana id_pem
sama dengan A66. Seperti pada gambar bawah ini.

Pada gambar diatas menunjukkan isi dari tabel log_pembelian setelah proses insert dan
update. Pada waktu memang waktu sekarang karena menggunakan NOW().

- Pada DELETE, Kita akan memasukkan operasi “Delete” dan menampilkan waktu
operasinya di tabel log_pembelian

Source Code :
DELIMITER //
CREATE TRIGGER Del
AFTER DELETE ON pembelian_obat
FOR EACH ROW BEGIN
DECLARE stat VARCHAR(25);
SET stat='DELETE';
INSERT INTO log_pembelian (operasi,waktu) VALUES (stat,NOW());
END //

Pada perintah diatas terdapat perintah CREATE TRIGGER Del


AFTER DELETE ON pembelian_obat yang digunakan untuk membuat trigger dengan
waktu pengeksekusian yaitu AFTER dengan EVENT Delete pada tabel pembelian obat ,
kemudian pada perintah DECLARE stat VARCHAR(25);
SET stat='UPDATE'; yang berfungsi untuk mendeklarasikan stat dengan tipe data
VARCHAR dengan batas 25 kemudian kita nyatakan stat = UPDATE. Pada INSERT
INTO log_pembelian (operasi,waktu) VALUES (stat,NOW()); digunakan untuk
menambahkan data pada tabel log_pembelian dengan kolom operasi,waktu dengan nilai
pada operasi yaitu stat pada waktu kita beri NOW().
Source Code :

DELETE FROM pembelian_obat WHERE id_pem='A66'

Pada perintah DELETE FROM pembelian_obat digunakan untuk menghapus pada tabel
pembelian_obat. Kemudian perintah WHERE id_pem='A66' digunakan untuk
menyatakan kondisi dimana id_pem = A66.

Pada gambar diatas menunjukkan isi dari tabel log_pembelian setelah proses insert,
update, delete.

• Kesimpulan

• Kita dapat Memahami konsep dasar trigger di dalam basis data

• Kita dapat memahami Memahami konsep dasar trigger di dalam basis data
• Kita mampu menyelesaikan kasus-kasus pengambilan data yang kompleks dengan
pendekatan trigger

• Kita dapat memahami fungsi operator-operator yang diperlukan pada trigger

• Kita dapat mengiplementasikan trigger pada modul berikutnya atau pada pengembangan
database.

• Trigger adalah batch/sekumpulan perintah yang secara otomatis dikerjakan ketika


terjadi penyisipan (insert), pengubahan (update) atau penghapusan data (delete) pada
sebuah tabel.

• Daftar Rujukan
Tim Asisten Dosen. 2018. Modul 6 Subquery. Malang:
Universitas Negeri Malang

Kadir, Abdul. 2013. Pemrograman Database MySQL untuk Pemula.


Yogyakarta: MediaKom.

Fajrin.Firman.2014. Pengertian TRIGGER dan IMPLEMENTASINYA.


http://memahamibdl.blogspot.co.id/2014/07/pengertian-trigger-dan-
implementasinya.html.

Akbar.Nuris.2016. TUTORIAL MENGGUNAKAN TRIGGER PADA DATABASE


MYSQL.
https://belajarphp.net/tutorial-trigger-mysql/.

Supernova.2011. Basis Data Lanjut.http://database-


alkaizer.blogspot.co.id/2011/01/trigger.html

Anda mungkin juga menyukai