Anda di halaman 1dari 16

LAPORAN MODUL 8

PRAKTIKUM BASIS DATA

Disusun untuk Memenuhi Matakuliah Praktikum Basis Data


Yang Dibimbing oleh
Triyanna Widiyaningtyas, S.T, M.T

Disusun Oleh:
ADITYA RAHMAN (160535611825)
FENTYKA AYU ROSYANI PUTRI (160535611811)
RADITHA ULFAH (150535602259)

S1 TI OFF A 2016

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI TEKNIK INFORMATIKA
MARET 2017
1. 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.
2. DASAR TEORI
 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. 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.
 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:

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.
3. LATIHAN
Dalam latihan ini kita menggunakan 2 table,yaitu table barang dan table pembelian.
Dalam table barang kita menggunakan ketentuan sebagai berikut :

Untuk data di dalam table barang kita masukkan data di bawah ini :

Dan untuk table pembelian kita menggunakan ketentuan sebagai berikut :

Untuk data di dalam table pembelian kita masukkan data di bawah ini :

SYNTAX
CREATE TABLE `transaksi`.`barang` ( `id_brg` VARCHAR(3) NOT NULL
, `nama_brg` VARCHAR(30) NOT NULL , `stok` INT(3) NOT NULL )
ENGINE = InnoDB;
ALTER TABLE `pembelian` CHANGE `id_pem` `id_pem` INT(2) NOT NULL,
CHANGE `id_brg` `id_brg` VARCHAR(3) NOT NULL, CHANGE `jml_beli`
`jml_beli` INT(2) NOT NULL;

INSERT INTO `transaksi`.`pembelian` (`id_pem`, `id_brg`,


`jml_beli`) VALUES ('1', 'A10', '5');
INSERT INTO `transaksi`.`barang` (`id_brg`, `nama_brg`, `stok`)
VALUES ('A10', 'Mouse', '10'), ('A11', 'Keyboard', '15'), ('A12',
'DVD R-W', '10')

1) Menggunakan Trigger
a. Langkah-langkah
 Pada latihan pertama kali ini, setelah kita membuat kedua table diatas sebelum
masuk ke trigger terlebih dahulu kita me-klik database yang sebelumnya kita
buat dimana berisi table barang dan table pembelian
 Setelah itu tekan more lalu pilih Triggers
 Terdapat kolom new seperti dibawah ini

 Tekan add trigger.


 Setelah itu tulis sesuai dengan ketentuan dibawah ini

 Setelah di tekan GO. Maka akan muncul di kolom trigger kalian seperti dibawah
ini
 Lalu kita tulisakan syntax seperti di bawah ini
INSERT INTO barang VALUES('A13','Modem',5);
 Setelah pilih GO maka hasil yang anda tulis SQL diatas akan muncul seperti ini

 Maka akan terlihat perbedaan dimana padasaat kita memasukkan syntax nya
kita nenulis 5 dan pada saat setelah kita menekan GO maka muncul angka 6.
Kenapa ? karena pada saat kita membuat trigger kita sudah memasukkan syntax
yang dimana apabila memasukkan data dengan id_brg, nama_brg dan stok maka
pada field stok akan menambah angka 1.
 Setelah itu kita mencoba menghapus trigger dengan menggunakan perintah
DROP. Dengan menuliskan sytax seperti dibawah ini
DROP TRIGGER inkremenStok2
 Atau juga anda dapat melakukan seperti cara berikut. Dengan me-klik trigger
lalu ada kolom trigger dan anda dapat menghapus nya dengan me-klik tulisan
DROP dan pilih OK.
b. Syntax
CREATE DEFINER=`root`@`localhost` TRIGGER `inkremenStok2`
BEFORE INSERT ON `barang` FOR EACH ROW SET NEW.stok =
NEW.stok +1

INSERT INTO barang VALUES('A13','Modem',5);

DROP TRIGGER inkremenStok2


2) Keyword OLD and NEW
a. Langkah-langkah
 Untuk keyword OLD yang berarti mengacu padanilai yang lama. Sedangkan
keyword NEW sesuai dengan namanya yang berarti baru maka mengacu pada
nilai yang baru atau yang baru diinputkan.
 Pertama kita membuat trigger terlebih dahulu, ulangi langkah pada latihan
pertama yang membuat trigger dan tentu saja dengan nama trigger yang berbeda
 Masukkan ketentuan seperti dibawah ini

 Setelah itu tekan GO. Dan trigger anda akan muncul seperti dibawah ini

 Setelah itu tuliskan syntax seperti dibawah ini


SELECT * FROM barang
 Setelah itu tekan GO. Maka akan muncul data yang kita tuliskan syntax nya tadi
 Setelah itu masuk kedalam table pembelian. Lalu tuliskan syntax seperti di
bawah ini
INSERT INTO pembelian (id_pem,id_brg,jml_beli)
VALUES ('2','A10','10');
 Maka akan muncul hasilnya seperti ini

 Lalu cek kembali data anda dengan cara menuliskan syntax yang ada dibawah
ini
SELECT * FROM barang
 Maka akan muncul hasilnya saperti data yang terdapat didalam table barang
 Untuk kasus Trigger DELETE atau menghapus TRIGGER keyword yang yang
bisa digunakan OLD.
 Kita membuat lagi trigger dengan ketentuan seperti dibawah ini

 Setelah itu tekan GO. Lalu kita tuliskan syntax dibawah di table barang
DELETE FROM barang WHERE id_brg = 'A10'
 Maka akan menghasilkan seperti di bawah ini

 Setelah itu cek kembali pada table pembelian maka akan muncul table data yang
memunculkan tabla barang
SELECT * FROM pembelian
 Untuk UPDATE sendiri kita dapat memanfaatkan keyword NEW atau OLD
.Setelah itu kita buat lagi trigger dengan ketentuan dibawah ini

 Setelah itu masuk ke QL dan tuliskan syntaxyangada di bawah ini


UPDATE `pembelian` SET jml_beli = 20 WHERE id_pem = 3
 Setelah itu akan muncul data seperti di bawah ini

 Setelah itu cek kembali pada table pembelian maka akan muncul table data yang
memunculkan tabla barang
SELECT * FROM barang
b. Syntax
CREATE TRIGGER `updateStok` AFTER INSERT ON `pembelian` FOR
EACH ROW UPDATE barang SET stok = stok + NEW.jml_beli WHERE
id_brg = NEW.id_brg;

SELECT * FROM barang

INSERT INTO pembelian (id_pem,id_brg,jml_beli)


VALUES ('2','A10','10');

SELECT * FROM barang

CREATE DEFINER=`root`@`localhost` TRIGGER `deleteChild`


AFTER DELETE ON `barang` FOR EACH ROW DELETE FROM pembelian
WHERE id_brg = OLD.id_brg

DELETE FROM barang WHERE id_brg = 'A10'

SELECT * FROM pembelian

CREATE TRIGGER `updateStokEdit` AFTER UPDATE ON `pembelian`


FOR EACH ROW UPDATE barang SET stok = stok + (NEW.jml_beli -
OLD.jml.beli) WHERE id_brg = NEW.id_brg

UPDATE `pembelian` SET jml_beli = 20 WHERE id_pem = 3

SELECT * FROM `barang`


3) Trigger Kompleks
a. Langkah-langkah
 Dalam trigger kompleks sendiri dapat mengatasi bebagai persoalan yang rumit.
 Pertaman kita buat terlebih dahulu trigger dengan ketentuan berikut
 Setelah itu klik GO
b. Syntax
CREATE TRIGGER `auditBarang` BEFORE INSERT ON `barang` FOR
EACH ROW 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;

4. TUGAS PRAKTIKUM
A. TUGAS PRAKTIKUM 1
 Query
IF (NEW.jml_beli > 50 AND NEW.jml_beli < 100)
THEN
SET NEW.jml_beli = NEW.jml_beli + 5;
ELSE IF(NEW.jml_beli >= 100 AND NEW.jml_beli < 150)
THEN
SET NEW.jml_beli = NEW.jml_beli + 10;
ELSE IF(NEW.jml_beli >= 150)
THEN
SET NEW.jml_beli = NEW.jml_beli + 20;

END IF;
END IF;
END IF
 Printscreen

 Analisa
Dalam tugas praktikum ini kita membuat trigger didalam table pembelian.
Dengan trigger name diskon. Time = BEFORE bermaksud trigger akan
mengeksekusi data sebelum masuk ke database. Event = INSERT
bermaksud trigger akan terjadi apabila ada masukan data ke database.
Program trigger ini dengan aturan apabila konsumen membeli barang lebih
dari 50 dan kurang 100 maka bonus 5, membeli barang lebih dari 100 dan
kurang 150 maka bonus 10, dan konsumen membeli barang lebih dari 150
maka mendapat bonus 20 dimana pada saat kita mengambila barang di table
barang maka terjadi pula pengurangan stok di table barang.
5. TUGAS RUMAH
A. TUGAS RUMAH
 Query
IF (NEW.jml_beli < (SELECT stok FROM barang WHERE
id_brg = NEW.id_brg ))
THEN
SET @jumlah_pem = (SELECT harga FROM barang WHERE
id_brg = NEW.id_brg) * NEW.jml_beli;
INSERT INTO pembayaran
VALUES (NEW.id_pem, @jumlah_pem);

IF (NEW.jml_beli > 50 AND NEW.jml_beli < 100)


THEN
SET NEW.jml_beli = NEW.jml_beli + 5;
ELSEIF(NEW.jml_beli >= 100 AND NEW.jml_beli < 150)
THEN
SET NEW.jml_beli = NEW.jml_beli + 10;
ELSEIF(NEW.jml_beli >= 150)
THEN
SET NEW.jml_beli = NEW.jml_beli + 20;

END IF;

UPDATE barang
SET stok = stok - NEW.jml_beli
WHERE id_brg = NEW.id_brg;

ELSE
SET @status = 'stok tidak cukup';
END IF
 Printscreen

Memasukkan data baru ke table pembelian

Hasil dari table pembayaran setelah kita masukkan data diatas

 Analisa

dalam tugas rumah yang pertama kita tetap menggunakan trigger diskon,
hanya saja kita menambahkan operasi dimana pada saat kita memasukkan
data di pembelian maka pada table pembayaran akan muncul secara
otomatis data yang kita masukan didalam table pembelian dan akan
terhitung pula harga yang konsumen beli di table pembelian.
Jika field jml_beli di table pembayaran kurang dari stok dari table barang,
dimana jumlah_set = field harga dari table barang dimana id_brg didalam
table barang di relasi id_brg di table pembayaran di kali dengan jml_beli di
table pembelian.
apabila konsumen membeli barang lebih dari 50 dan kurang 100 maka
bonus 5, membeli barang lebih dari 100 dan kurang 150 maka bonus 10,
dan konsumen membeli barang lebih dari 150 maka mendapat bonus 20
dimana pada saat kita mengambila barang di table barang maka terjadi pula
pengurangan stok di table barang.
Setelah itu table barang di Update dengan ketentuan stok = stok –
NEW.jml_beli di table pembelian.
B. TUGAS RUMAH 2
 Query
Trigger Insert
INSERT INTO log_pembelian VALUES ('Memasukkan
Data',NOW())
Trigger Update
INSERT INTO log_pembelian VALUES ('Mengubah
data',NOW())
Trigger Delete
INSERT INTO log_pembelian VALUES ('Menghapus
Data',NOW())
 Printscreen
Trigger Insert
Trigger Update

Trigger Delete

 Analisa
Untuk tugas rumah yang kedua, kita membuat trigger insert, update, delete.
Dimana pada saat trigger insert yang apabila kita memasukkan data di tabel
pembelian maka pada saat itu juga muncul data di table log_pembelian
yang berisi “Memasukkan data beserta tanggal user memasukkan data”.
Pada saat trigger Update yang apabila kita mengganti data di tabel
pembelian maka pada saat itu juga muncul data di table log_pembelian
yang berisi “Mengganti data beserta tanggal user memasukkan data”.
Pada saat trigger Delete yang apabila kita menghapus data di tabel
pembelian maka pada saat itu juga muncul data di table log_pembelian
yang berisi “Menghapus data beserta tanggal user memasukkan data”.

6. KESIMPULAN
Trigger dapat didefinisikan sebagai himpunan kode (prosedural) yang dieksekusi secara
otomatis sebagai respon atas suatu kejadian berkaitan dengan tabel basis data.
Trigger memiliki 3 kejadian (EVENT) INSERT, UPDATE, DELETE. Trigger
7. RUJUKAN
Modul 8 Trigger
http://www.academia.edu/12097346/LAPORAN_TRIGGER_BASIS_DATA

Anda mungkin juga menyukai