PENGERTIAN TRIGGER
Dalam DBMS (Database Management System), trigger merupakan kumpulan script yang berhubungan dengan table, view ataupun skema yang dijalankan secara otomatis ketika terdapat event yang dijalankan. Event tersebut meliputi operasi yang biasa dilakukan dalam mengolah database, seperti :
- DML (Data Manipulation Language) yang meliputi DELETE, INSERT atau UPDATE
- DDL (Data Definition Language) yang meliputi CREATE, ALTER atau DROP
- Operasi Database lainnya, seperti SERVERERROR, LOGON, LOGOFF, STARTUP atau SHUTDOWN)
Secara sederhana, perintah untuk membuat trigger adalah sebagai berikut :
CREATE TRIGGER nama_trigger [BEFORE|AFTER]
[INSERT/UPDATE/DELETE]
ON nama_table
FOR EACH ROW
BEGIN
// trigger body
END;
Keterangan dari bentuk perintah umum dalam membuat trigger, yaitu :
- nama_trigger : nama trigger yang dibuat sesuai dengan karakteristik penamaan dalam MySQL
- [BEFORE|AFTER] : menunjukkan waktu untuk mengeksekusi trigger secara otomatis, apakah sebelum atau sesudah perubahan pada row data table. Jadi pilihannya adalah AFTER atau BEFORE.
- [INSERT | UPDATE | DELETE] : digunakan untuk menentukan event yang menyebabkan terjadinya trigger, pilIhan event tersebut terdiri dari INSER, UPDATE dan DELETE.
- nama_table : menunjukkan table yang akan dilakukan trigger didalamnya
- trigger_body : menunjukkan statement perintah dalam MySQL yang akan otomatis dijalankan jika event sedang aktif.
Fungsi Trigger

Biasanya dalam relasional database, trigger dapat ditemui ketika melakukan perintah eksekusi table. Hal itu menjadi lebih bermanfaat trigger menjaikan penulisan pemrograman yang sederhana dan dapat menjaga informasi agar tetap konsisten dalam database. Selain itu, terdapat beberapa fungsi trigger yang akan dijelaskan dibawah ini.
1. Integritas Data
Dengan adanya trigger, Anda dapat mempertahankan integritas table yang terdapat dalam database. Sebab, Anda dapat melakukan operasi-operasi yang berkaitan dengan pengolahan database, seperti INSERT, UPDATE dan DELETE
2. Mencegah Error
Trigger dalam MySQL dapat mencegah terjadinya error dalam pengoperasian data. Jika terjadi error dalam pendefinisian trigger, error tersebut tidak mengganggu trigger yang sedang berjalan.
3. Membuat Tugas Kerja menjadi Terjadwal
Ketika trigger telah dijalankan, maka Anda dapat menggunakan berbagai bahasa pemrograman tanpa harus bingung bagaimana cara mengaksesnya.
4. Mencegah Proses Transaksi yang Tidak Sah
Dalam praktiknya, biasa trigger digunakan untuk melakukan proses transaksi. Anda dapat menyimpan record transaksi tersebut ke table lain (history) tanpa harus takut jika data tersebut di-update atau delete. Semua perubahan yang terjadi juga dapat diacak berdasarkan waktu pembuatannya.
CONTOH KASUS :
>Membuat table produk , jika dalam gambar dibawah ini sebelum di lakukan rename dengan
RENAME table penjualan to produk;
MariaDB [(none)]> use penjualan;
Database changed
MariaDB [penjualan]> create table penjualan(
-> kd_produk varchar(6) NOT NULL,
-> nm_produk varchar(100),
-> harga int(11));
Query OK, 0 rows affected (0.387 sec)
>Membuat table log_harga
MariaDB [penjualan]> create table log_harga (
-> log_id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> kd_produk varchar(8),
-> harga_lama int(11),
-> harga_baru int(11),
-> waktu_perubahan datetime);
Query OK, 0 rows affected (0.168 sec)
>Input data table
sebelum dilakukan uji coba dalam pembuatan trigger terlebih dahulu dalam melakukan input data guna dapat menampilkan hasil trigger jika dilakukan select
MariaDB [penjualan]> insert into produk values ('ATK001','PENSIL','12000');
Query OK, 1 row affected (0.124 sec)
MariaDB [penjualan]> INSERT INTO produk values ('ATK002','PENGHAPUS','8000');
Query OK, 1 row affected (0.083 sec)
MariaDB [penjualan]> SELECT * FROM PRODUK;
---------------------------------------------
| kd_produk | nm_produk | harga |
---------------------------------------------
| ATK001 | PENSIL | 12000 |
| ATK002 | PENGHAPUS | 8000 |
---------------------------------------------
2 rows in set (0.041 sec)
>Membuat Trigger
Delimiter $$
CREATE trigger before_produk_update
BEFORE UPDATE ON produk
FOR EACH ROW
BEGIN
INSERT into_harga
SET kd_produk = OLD.kd_produk,
harga_baru = NEW.harga,
harga_lama = OLD.harga,
waktu_perubahan = NOW();
END $$
hasil contoh jika trigger dengan nama yang kita buat telah tersedia.
jika kita ingin melihat trigger yang telah kita buat dalam PHPmyAdmin berikut gambarannya :
>Uji Coba Trigger 1. Masukkan beberapa record ke tabel produk,
contoh
INSERT INTO produk VALUES ('ATK001','PENSIL',12000);
INSERT INTO produk VALUES ('ATK002','PENGHAPUS',8000);
XAMPP nya :
MariaDB [penjualan]> insert into produk values ('ATK001','PENSIL','12000');
Query OK, 1 row affected (0.124 sec)
MariaDB [penjualan]> INSERT INTO produk values ('ATK002','PENGHAPUS','8000');
Query OK, 1 row affected (0.083 sec)
MariaDB [penjualan]> SELECT * FROM PRODUK;
---------------------------------------------
| kd_produk | nm_produk | harga |
---------------------------------------------
| ATK001 | PENSIL | 12000 |
| ATK002 | PENGHAPUS | 8000 |
---------------------------------------------
2 rows in set (0.041 sec)
2. Update harga produk,
contoh
update produk set harga=10000 WHERE kd_produk='ATK001'
Membuktikan Trigger
Trigger akan berhasil jika di dalam tabel tujuan trigger, yang dalam contoh ini adalah tabel log_harga secara
otomatis akan terdapat record baru, cara cek?
select * from log_harga;
- Pada tabel log_harga tambahkan field: > nm_produk_baru dengan tipe data varchar (100)
> nm_produk_lama dengan tipe data varchar (100)
- Uji cobakan triger yang dibuat dengan update:
> update produk set nm_produk=PENGGARIS WHERE kd_produk='ATK001'

penjelasan mengapa eror, karena pada field produk tidak terdapatnya field yang bernama penggaris sedangkan dalam field log_harga hanya di sebutkan kode produk namun tidak disebutkan nama produknya.
sekian penjelasan tentang trigger kali ini. mohon maaf terdapat beberapa gambaran yang tidak serupa dikarenakan terdapat gangguan laptop yang sempet ngeblank pada akhirnya beberapa script lupa untuk di ambil tangkapan gambarnya. terima kasih wassalam.
Tidak ada komentar:
Posting Komentar