Disusun Oleh:
ADITYA RAHMAN (160535611825)
FENTYKA AYU ROSYANI PUTRI (160535611811)
RADITHA ULFAH (150535602259)
S1 TI OFF A 2016
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 :
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;
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
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
Setelah itu tekan GO. Dan trigger anda akan muncul seperti dibawah 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 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;
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);
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
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