PRAKTIKUM BASIS DATA
MODUL 8
TRIGGER DAN EVENT
1. Tujuan
a. Memahami konsep trigger dan event pada SQL.
b. Mampu mengimplementasikan penggunaan trigger dan event pada basis data.
2. Dasar Teori
A. Trigger
Sebuah Trigger merupakan stored program yang terhubung dengan sebuah tabel
tertentu dan diaktifkan oleh pernyataan INSERT, DELETE, atau UPDATE untuk tabel
tersebut. Sebuah trigger dapat diatur untuk diaktifkan sebelum (before) atau sesudah
(after) pernyataan untuk memproses setiap baris.
Berikut ini adalah keuntungan-keuntungan yang ditawarkan dari penggunaan trigger:
A. Trigger dapat melakukan pemeriksaan atau merubah nilai data baru yang akan
dimasukan atau baris yang akan diperbarui. Hal ini memungkinkan penegakan
batasan-batasan integritas data (data integrity constraints), misalnya melakukan
verifikasi bahwa nilai persen hanya ada dalam range 0 sampai 100.
B. Sebuah trigger dapat memberikan nilai default untuk sebuah kolom berdasar
sebuah ekspresi. Hal ini memungkinkan untuk melakukan pembatasan nilai untuk
sebuah kolom dengan nilai yang konstan.
C. Trigger dapat memeriksa isi dari sebuah baris sebelum dihapus atau diperbarui .
kemampuan ini dapat dimanfaatkan untuk membuat suatu sistem log dari
perubahan baris yang ada.
Syntaks dasar dari trigger adalah sebagai berikut:
Perintah SQL :
CREATE TRIGGER nama_trigger # nama trigger
{BEFORE | AFTER} # kapan trigger diaktifkan
{INSERT | UPDATE | DELETE} #statement apa yang mengaktifkan
ON nama_tabel # tabel yang berhubungan
FOR EACH ROW
BEGIN
pernyataan_triger; # pernyataan-pernyataan yang
akan dijalankan
END
Menghapus trigger:
Perintah SQL :
DROP TRIGGER nama_trigger;
Melihat list trigger yang telah dibuat:
Perintah SQL :
SHOW TRIGGERS\G;
B. Event
Event adalah objek bernama yang berisi satu atau lebih pernyataan SQL yang
dijalankan sesuai dengan jadwal yang ditentukan. Mereka disimpan dalam database dan
dieksekusi pada satu interval atau lebih. Terdapat dua jenis Event Scheduler pada MySQL
yaitu event berdasarkan tanggal dan waktu serta pengulangan waktu. Sintaks dari event
adalah sebagai berikut.
Event berdasarkan tanggal dan waktu:
Perintah SQL :
DELIMITER //
CREATE EVENT nama_event # nama event
ON SCHEDULE
AT {DATE AND TIME} # tanggal dan waktu
DO
BEGIN
{pernyataan event};
{pernyataan event}; # pernyataan-pernyataan SQL
END //
Event berdasarkan perulangan wkatu:
Perintah SQL :
DELIMITER //
CREATE EVENT nama_event # nama event
ON SCHEDULE
EVERY {X} # x adalah interval waktu
{SECOND|MINUTE|HOUR|DAY|MONT|YEAR|WEEK} # unit interval waktu
DO
BEGIN
{pernyataan event};
{pernyataan event}; # pernyataan-pernyataan SQL
END //
Melihat list event yang telah dibuat:
Perintah SQL :
SELECT * FROM [Link]\G;
Menghapus event:
Perintah SQL :
DROP EVENT nama_event;
Latihan
a) Buatlah tabel baru dengan nama mahasiswa_log dengan struktur sebagai berikut.
Kolom Tipe Data Keterangan
log_id INT PRIMARY KEY, NOT NULL, AUTO_INCREMENT
nim INT
keterangan VARCHAR(30)
waktu TIMESTAMP
b) Membuat trigger untuk melakukan pengisian data pada tabel mahasiswa log,
setelah melakukan INSERT pada tabel mahasiswa.
Perintah SQL :
CREATE OR REPLACE TRIGGER insert_log
AFTER INSERT ON mahasiswa
FOR EACH ROW
INSERT INTO mahasiswa_log (nim,keterangan,waktu)
VALUES ([Link],'Ditambah',now());
Coba tambahkan data pada tabel mahasiswa, kemudian tampilkan isi tabel
mahasiswa_log. Contoh :
INSERT INTO mahasiswa VALUES (160613,'Sieg','6','Laki-laki',2016,'Manado');
SELECT * FROM mahasiswa_log;
c) Membuat trigger untuk melakukan pengisian data pada tabel mahasiswa log,
setelah melakukan UPDATE pada tabel mahasiswa.
Perintah SQL :
CREATE OR REPLACE TRIGGER update_log
AFTER UPDATE ON mahasiswa
FOR EACH ROW
INSERT INTO mahasiswa_log (nim,keterangan,waktu)
VALUES ([Link],'Diubah',now());
Coba ubah data pada tabel mahasiswa, kemudian tampilkan isi tabel
mahasiswa_log. Contoh :
UPDATE mahasiswa SET asal='Tondano' WHERE nim=160613;
SELECT * FROM mahasiswa_log;
d) Membuat trigger untuk melakukan pengisian data pada tabel mahasiswa log,
sebelum melakukan DELETE pada tabel mahasiswa.
Perintah SQL :
CREATE OR REPLACE TRIGGER delete_log
BEFORE DELETE ON mahasiswa
FOR EACH ROW
INSERT INTO mahasiswa_log (nim,keterangan,waktu)
VALUES ([Link],'Dihapus',now());
Coba hapus data pada tabel mahasiswa, kemudian tampilkan isi tabel
mahasiswa_log. Contoh :
DELETE FROM mahasiswa WHERE nim=160613;
SELECT * FROM mahasiswa_log;
e) Membuat tabel baru dengan nama kontrak_log dengan cara menduplikasi struktur
tabel kontrak. Setelah itu membuat event untuk memindahkan data tabel kontrak
pada tabel kontrak_log setiap lima menit.
Perintah SQL :
Pertama mengecek apakah event_scheduler pada mysql telah berjalan atau tidak,
SHOW VARIABLES WHERE VARIABLE_NAME = ‘event_scheduler’
Jika status event_scheduler adalah off, untuk menjalankan event_scheduler
SET GLOBAL event_scheduler = ON;
Sebelum membuat event, tampilkan waktu saat ini
SELECT CURRENT_TIMESTAMP();
Selanjutnya, akan mulai membuat event.
DELIMITER //
CREATE EVENT e_kontrak
ON SCHEDULE
EVERY 5 MINUTE
DO BEGIN
INSERT INTO KONTRAK_LOG (SELECT * FROM KONTRAK);
DELETE FROM KONTRAK;
END //
DELIMITER ;
Tampilkan lagi timestamp setelah event dibuat, dan tampilkan perubahan yang
terjadi setelah 5 menit.