BAB v Trigger

download BAB v Trigger

of 4

description

tekbas

Transcript of BAB v Trigger

BAB VTRIGGER3.1 Tujuan Praktikum3.2 Dasar Teori3.2.1 TriggerTrigger adalah sebuah objek database yang diasosiasikan dengan sebuah tabel dan akan aktif atau terpicu 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 SQL-nya.Trigger dapat digunakan untuk mengubah data sebelum proses INSERT dilakukan atau untuk memberikan nilai default. Misalnya mengubah data yang diluar yang diperbolehkan. Misalnya, jika ada pengisian nilai di atas 100, maka akan dijadikan 100.

Data suatu record dapat disimpan ke tabel lain (misalnya history) sebelum data tersebut diupdate atau didelete. Sehingga semua perubahan data dapat terlacak dari sejak data tersebut dibuat.

Trigger mulai dikenal di versi MySQL 5.0, dan di versi saat ini (5.0.4) fungsionalitasnya sudah bertambah. Pada versi selanjutnya (5.1) pihak pengembang MySQL berjanji akan lebih menguatkan (menambah) fitur trigger ini. Trigger sering digunakan, antara lain untuk:

Melakukan update data otomatis jika terjadi perubahan. Contohnya adalah dalam sistem penjualan, jika dientri barang baru maka stock akan bertambah secara otomatis.

Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi perubahan, secara otomatis akan menyimpan ke tabel log.

Trigger dapat digunakan untuk melakukan validasi dan verifikasi data sebelum data tersebut disimpan.

3.2.2 Membuat Trigger Baru

Berikut ini bentuk umum perintah untuk membuat trigger:CREATE TRIGGER nama_trigger

{BEFORE | AFTER}

{INSERT | UPDATE | DELETE}

ON nama_tabel

FOR EACH ROW

BEGIN

statement-statement

END;Kode Program 3.1 Struktur Dasar TriggerDimana,

BEFORE | AFTER digunakan untuk menentukan kapan proses secara otomatis akan dieksekusi, sebelum atau sesudah proses;

INSERT | UPDATE | DELETE digunakan untuk menentukan event yang dijadikan trigger untuk menjalankan perintah-perintah di dalam trigger.

Statement atau perintah dalam trigger dapar berupa satu perintah saja, dan dapat juga beberapa perintah sekaligus. Jika terdapat beberapa perintah salam trigger, maka gunakan perintah BEGIN dan END untuk mengawali dan mengakhiri perintah.

Di dalam statement trigger, dapat mengakses record tabel sebelum atau sesudah proses dengan menggunakan NEW dan OLD. NEW digunakan untuk mengambil record yang akan diproses (insert atau update), sedangkan OLD digunakan untuk mengakses record yang sudah diproses (update atau delete).

Berikut ini contoh trigger yang akan mencatat aktivitas ke tabel log setiap terjadi proses insert ke tabel pelanggan:

DELIMITER $$

CREATE TRIGGER penjualan.before_insert

BEFORE INSERT ON penjualan.pelanggan

FOR EACH ROW

BEGIN

INSERT INTO tb_log (deskripsi, waktu, user_id)

VALUES (CONCAT('Insert data ke tabel pelanggan, id_plg = ', new.id_pelanggan), NOW(), USER());

END;

$$

DELIMITER;Kode Program 3.2 Contoh Trigger Tabel Pelanggan3.2.3 Menghapus TriggerUntuk menghapus trigger, dapat menggunakan perintah DROP TRIGGER dengan diikuti nama tabel dan nama triggernya. Berikut ini bentuk umum dan contoh perintah untuk menghapus trigger.DROP TRIGGER tablename.triggername;Kode Program 3.3 Syntax Menghapus TriggerContoh:

DROP TRIGGER penjualan.before_insert;

Kode Program 3.4 Contoh Menghapus Trigger3.3 Percobaan

Percobaan yang perlu dilakukan dalam praktikum trigger ini adalah sebagai berikut:1. Buat trigger untuk mengupdate trx_status pada tb_kwitansi menjadi PENDING (total_bayar lebih kecil) atau CLOSED (total_bayar sama).2. Buat trigger untuk mengupdate tb_kwitansi (total_bayar dan trx_status) berdasarkan update tabel baru (tabel X) dari replikasi.

3.4 Pembahasan dan Uji Coba3.4.1 Trigger Update trx_status pada tb_kwitansiDELIMITER $$

CREATE

/*[DEFINER = { user | CURRENT_USER }]*/

TRIGGER `db_tekbas`.`ubah_status` AFTER UPDATE

ON `db_tekbas`.`tb_detail_kwitansi`

FOR EACH ROW BEGIN

DECLARE harus_bayar BIGINT(20);

DECLARE total_bayar BIGINT(20);

SET harus_bayar = (SELECT tb_kwitansi.`total` FROM tb_kwitansi WHERE tb_kwitansi.`kwitansi_id`=NEW.kwitansi_id);

SET total_bayar = (SELECT SUM(tb_detail_kwitansi.`jumlah_bayar`) FROM tb_detail_kwitansi WHERE tb_detail_kwitansi.`kwitansi_id`= NEW.kwitansi_id);

IF (total_bayar < harus_bayar) THEN

UPDATE tb_kwitansi SET tb_kwitansi.`trx_status` = 'PENDING' WHERE tb_kwitansi.`kwitansi_id`=NEW.kwitansi_id;

ELSEIF (total_bayar = harus_bayar) THEN

UPDATE tb_kwitansi SET tb_kwitansi.`trx_status` = 'CLOSED' WHERE tb_kwitansi.`kwitansi_id`=NEW.kwitansi_id;

END IF;

END$$

DELIMITER ;3.5 Kesimpulan

8