0% menganggap dokumen ini bermanfaat (0 suara)
136 tayangan

Modul Basis Data (Trigger)

Trigger adalah kode prosedural yang dieksekusi secara otomatis ketika terjadi perubahan data pada tabel basis data. Trigger dapat digunakan untuk memodifikasi data sebelum atau sesudah perubahan, dan dapat membantu menjaga konsistensi dan integritas data. Modul ini menjelaskan konsep dasar trigger serta contoh implementasinya untuk menangani kasus transaksi penjualan dan stok barang.

Diunggah oleh

Nisa Rizqiya
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
136 tayangan

Modul Basis Data (Trigger)

Trigger adalah kode prosedural yang dieksekusi secara otomatis ketika terjadi perubahan data pada tabel basis data. Trigger dapat digunakan untuk memodifikasi data sebelum atau sesudah perubahan, dan dapat membantu menjaga konsistensi dan integritas data. Modul ini menjelaskan konsep dasar trigger serta contoh implementasinya untuk menangani kasus transaksi penjualan dan stok barang.

Diunggah oleh

Nisa Rizqiya
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 11

Modul Basis Data II 1

MODUL BASIS DATA II


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. 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.
Berdasarkan ruang lingkupnya, trigger diklasifikasikan menjadi dua jenis : row trigger dan
statetment trigger. Trigger baris (row) mendefinisikan aksi untuk setiap baris tabel : trigger
pernyataan hanya berlaku untuk setiap pernyataan INSERT, UPDATE dan DELETE.
Umumnya ada dua jenis eksekusi trigger yaitu BEFORE dan AFTER dalam merepresentasikan
waktu eksekusi antara sebelu atau sesudah pernyataan-pernyataan yang berkorespondensi.
Adakalanya trigger dipandang sebagai bentuk spesifik dari stored procedure. Bagaimanapun,
trigger akan dipanggil (secara otomatis) ketika event terjadi, sedangkan stored procedure harus
dipanggil secara eksplisit.

Pendefinisian trigger diperlihatkan sebagai berikut :

CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger event
ON tbl_name FOR EACH ROW trigger_stmt

Keterangan :
[DEFINER = { user | CURRENT USER }] : Definisi user yang sedang aktif, sifatnya
opsional.
trigger_name : Nama trigger
trigger_time : waktu menjalankan trigger
trigger_event : berupa kejadian yang akan dijalan trigger
tbl_name : Nama tabel yang berasosiasi dengan trigger
trigger_stmt : Statement yang akan dijalankan

MYSQL tidak mengizinkan multiple trigger dengan waktu aksi dan event yang sama pada satu
tabel yang sama. Misalkan di tabel A sudah didefinisikan trigger AFTER INSERT, maka tidak
boleh mendefinisikan trigger AFTER INSERT lagi, namu AFTER EDIT, AFTER DELETE
atau BEFORE (INSERT, EDIT dan DELETE) bisa diterima.

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 2

2. Latihan

Operasi-operasi berkenaan dengan pendefinisian trigger tidak berbeda dengan onjek-objek


database lainnya.

Ketikkan pernyatan pembuatan trigger berikut :


DELIMITER //
CREATE TRIGGER dataMHS
BEFORE INSERT ON tbMahasiswa
FOR EACH ROW BEGIN
IF NEW.Semester IS NULL OR NEW.Semester = 0 THEN
SET NEW.Semester = 1;
END IF;
END //
DELIMITER ;

Pernyataan di atas memiliki arti untuk mengganti Semester jika Semester yang dimasukkan
bernilai NULL atau 0.

Untuk memcoba hasil trigger coba tambahkan data mahasiswa ke dalam tabel mahasiswa,
dengan kondisi field Semester diisi 0 atau NULL

INSERT INTO tbMahasiswa Values


(H2017123, Bunga, Jl. Kapuas, Malang, 1997-10-10,
P, );

Periksa hasilnya :

SELECT * FROM tbMahasiswa;

Terlihat bahwa trigger sudah bekerja seperti yang diharapkan, dimana penambahan baru
dengan kondisi Semester 0 atau NULL akan diganti menjadi 1.

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 3

Untuk mendapatkan informasi mengenai daftar trigger yang telah terdefinisi, gunakan perintah
SHOW TRIGGERS (tambahkan \G untuk menampilkan data secara vertikal)

SHOW TRIGGERS\G;

Untuk menghapus trigger, gunakan perintah DROP

DROP TRIGGER [nama_trigger];

Keyword OLD dan NEW


Untuk merujuk ke kolom-kolom tabel yang diasosiasikan dengan trigger, kita menggunakan
keyword OLD dan NEW. Keyword OLD mengacu pada nilai lama, sedangkan NEW
merepresentasikan nilai baru. Trigger INSERT, hanya dapat menggunakan keyword NEW
karena tidak ada data lama.

Dalam kasus kali ini, kita mengambil kasus koperasi mahasiswa. Untuk mencoba Keyword
OLD dan NEW, buatlah tabel berikut ini :

1. Tabel Barang dengan nama : tbBarangKopMhs

2. Tabel Pemebelian dengan nama : tbPembelian

3. Tabel Penjualan dengan nama : tbPenjualanKopMhs

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 4

4. Tabel Detail Penjualan dengan nama : tbDetailJualKopMhs

5. Tambahkan data di tabel barang tbBarangKopMhs

Ketikkan query berikut untuk pembuatan trigger menggunakan keyword NEW. Trigger ini
bertujuan apabila ada penambahan data pembelian akan mengakibatkan nilai stock barang
bertambah menyesuaikan banyaknya nilai jumlah pembelian.

DELIMITER //
CREATE TRIGGER updateStock
AFTER INSERT ON tbPembelian
FOR EACH ROW BEGIN
UPDATE tbBarangKopMhs
SET stock = stock + NEW.jum_beli
WHERE kd_barang = NEW.kd_barang;
END //
DELIMITER ;

Eksekusi file trigger dengan cara menambahkan data baru pada tbBarangKopMhs
INSERT INTO tbPembelian VALUES
(,kd0004,48);

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 5

Berikut data Tabel Barang sebelum melakukan Pembelian

stock awal

Data Tabel Barang setelah melakukan penambahan di Tabel Pembelian

stock setelah
penambahan

Penggunaan keyword OLD bisa digunakan untuk trigger DELETE. Kita akan mendefinisikan
trigger untuk menghapus semua data pembelian manakala data barang yang sesuai
diindikasikan melalui primary key (kd_barang) di tbBarangKopMhs dan foreign key
(kd_barang) di tbPembelian.
Buatlah trigger berikut :
DELIMITER //
CREATE TRIGGER hapusForeign
AFTER DELETE on tbBarangKopMHS
FOR EACH ROW BEGIN
DELETE FROM tbPembelian
WHERE kd_barang = OLD.kd_barang;
END //
DELIMITER ;

Penggunaan trigger UPDATE bisa memanfaatkan keyword NEW maupun OLD. Kita akan
mendefiniskan trigger untuk mengupdate stock barang di Tabel Barang ketika terjadi
perubahan di jumlah beli di Tabel Pembelian.

DELIMITER //
CREATE TRIGGER editStock
AFTER UPDATE ON tbPembelian
FOR EACH ROW BEGIN
UPDATE tbBarangKopMhs
SET stock = stock (NEW.jum_beli OLD.jum_beli)
WHERE kd_barang = NEW.kd_barang;
6.
END //
DELIMITER ;

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 6

Trigger Kompleks

Persoalan yang pelik dapat diatasi dengan trigger, karena trigger juga bisa mengandung
pernyataan-pernyataan yang komples termasuk percabangan, perulangan, fungsi agregat,
bahkan pemanggilan prosedur atau fungsi.
Sebagai contoh, kita akan mendifiniskan trigger pada Tabel Barang (tbBarangKopMhs),
Tabel Penjualan (tbPenjualanKopMhs) dan Tabel Detail Penjualan (tbDetailJualKopMhs).

1. Kita akan mendefinisikan trigger untuk menghitung jumlah penjualan berdasarkan


banyaknya barang yang dibeli di Tabel Detail Penjualan (tbDetailPenjualanKopMhs)
dengan mengambil nilai harga satuan di Tabel Barang (tbBarangKopMhs).

DELIMITER //
CREATE TRIGGER totalSatuan
BEFORE INSERT ON tbDetailJualKopMhs
FOR EACH ROW BEGIN
DECLARE jum INT;
SET jum = (SELECT harga_satuan FROM tbBarangKopMhs WHERE
kd_barang = NEW.kd_barang);
SET NEW.total = NEW.banyak * jum;
END //
DELIMITER ;

2. Trigger juga bisa didefiniskan untuk UPDATE di 2 tabel atau lebih. Kita akan membuat
trigger apabila terjadi penambahan data di Tabel Detail Penjualan (tbDetailJualKopMhs),
maka stock barang di Tabel Barang (tbBarangKopMhs) akan berkurang sesuai dengan
banyaknya jumlah penjualan. Selain itu juga mengupdate total di Tabel Penjualan
(tbPenjualanKopMhs) sesuai dengan jumlah total di Tabel Detail Penjualan
(tbDetailJualKopMhs) dengan syarat id_penjualan yang sama.

DELIMITER //
CREATE TRIGGER updateBarangPenjualan
AFTER INSERT ON tbDetailJualKopMhs
FOR EACH ROW BEGIN
UPDATE tbBarangKopMhs, tbPenjualanKopMhs
SET
tbBarangKopMhs.stock = stock NEW.banyak,
tbPenjualanKopMhs.total = total + NEW.total
WHERE tbBarangKopMhs.kd_barang = NEW.kd_barang
AND tbPenjualanKopMhs.id_penjualan = NEW.id_penjualan;
END //
DELIMITER ;

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 7

3. Tambahkan data baru ke pada Tabel Penjualan (tbPenjualanKopMhs)

INSERT INTO tbPenjualanKopMhs VALUES


(DP000001, NOW(),);

4. Cobalah eksekusi trigger tersebut dengan melakukan penambahan data baru di Tabel Detail
Penjualan (tbDetailPenjualanKopMhs) dengan id_penjualan yang sudah ada di Tabel
Penjualan (tbPenjualanKopMhs).

INSERT INTO tbDetailJualKopMhs (id_penjualan, kd_barang,


banyak) VALUES
(DP000001, kd0001, 3),
(DP000001, kd0003, 2),
(DP000001, kd0004, 5);

Total penjualan per item barang akan otomatis dihitung

Jumlah Penjualan di Tabel Penjualan dengan id_penjualan yg sama juga telah terupdate

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 8

Jumlah stock barang di Tabel Barang berkurang sesuai dengan jumlah penjualan

5. Kita akan mendefinisikan trigger dikombinasikan dengan function. Tujuan membuat


trigger ini adalah untuk membuat id_penjualan secara otomatis. Sebelum membuat trigger
buatlah terlebih dahulu functionnya.

DELIMITER //
CREATE FUNCTION kdOtomatis (nomer INT)
RETURNS VARCHAR(8)
BEGIN
DECLARE kodebaru VARCHAR(8);
DECLARE urut INT;
SET urut = IF(nomer IS NULL, 1, nomer + 1);
SET kodebaru = CONCAT(DP, LPAD(urut, 6, 0));
RETURN kodebaru;
END //
DELIMITER ;

Penjelasan Function kdOtomatis :


SET urut = IF (nomer IS NULL, 1, nomer + 1)
Jika nilai id_penjualan adalah NULL maka akan di set default menjadi 1, tetapi jika
bukan NULL maka nilai akan + 1.
SET kodebaru = CONCAT (DP, LPAD (urut, 6, 0))
LPAD ialah menyisipkan karakter tertentu ke dalam string sebanyak batasan yang
ditentukan. Dalam hal ini kita memberikan nilai 6 digit angka 0.

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 9

6. Buatlah trigger untuk memanggil function yang telah kita buat sebelumnya.

DELIMITER //
CREATE TRIGGER kodeOtomatis
BEFORE INSERT ON tbPenjualanKopMhs
FOR EACH ROW BEGIN
DECLARE s VARCHAR(8);
DECLARE i INT;
SET i = (SELECT SUBSTRING(id_penjualan, 3, 6) AS Nomer
FROM tbPenjualanKopMhs ORDER BY Nomer DESC LIMIT 1);
SET s =(SELECT kdOtomatis(i));
IF (NEW.id_penjualan IS NULL OR NEW.id_penjualan = )
THEN SET NEW.id_penjualan = s;
SET NEW.tgl_jual = NOW();
END IF;
END //
DELIMITER ;

penjelasan :
SET i = (SELECT SUBSTRING (id_penjualan, 3, 6) AS Nomer FROM
tbPenjualanKopMhs ORDER BY Nomer DESC LIMIT 1
SUBSTRING memotong string di bagian tertentu, jadi substring mengambil nilai dari
char ke-3 sepanjang 6 char. Kemudian Order by nomer desc limit 1 adalah
mendapatkan nilai dari record paling akhir sehingga mendapatkan nilai terbesar.

7. Selanjutnya coba eksekusi trigger yang telah dibuat dengan menambahkan data baru di
Tabel Penjualan (tbPenjualanKopMhs)

INSERT INTO tbPenjualanKopMhs VALUES ( , , );

Terlihat bahwa id_penjualan otomatis menambahkan nilai terakhir yang diambil.

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 10

C. Tugas

1. Bautlah tabel baru dengan nama : tbNilai, merupakan Tabel Nilai dengan deskripsi

2. Definisikan trigger pada Tabel Nilai, sehingga saat melakukan INSERT dan UPDATE nilai
nilai_angka maka, nilai_huruf akan otomatis menyesuaikan dengan ketentuan yang telah
ditetapkan. Kemudian field ket akan otomatis terisis LULUS atau TIDAK LULUS
apabila nilai_angka dibawah 60 maka diberikan keterangan TIDAK LULUS dan
sebaliknya.

Syarat nilai_huruf :
nilai_angka 80 : A
nilai_angka 70 dan < 80 : B
nilai_angka 60 dan < 70 : C
nilai_angka 50 dan < 60 : D
nilai_angka < 50 : E

3. Buatlah Tabel Log dengan nama : tbLogMhs dengan field user, keterangan dan waktu.
Selanjutnya definisikan triiger di Tabel Mahasiswa (tbMahasiswa) untuk merekam
operasi INSERT, UPDATE dan DELETE.

contoh hasil trigger :

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda


Modul Basis Data II 11

Program Studi Manajemen Informatika - Politeknik Pertanian Negeri Samarinda

Anda mungkin juga menyukai