Trigger On Mysql
Trigger On Mysql
Trigger digunakan untuk memanggil satu atau beberapa perintah SQL secara
otomatis sebelum atau sesudah terjadi proses INSERT, UPDATE atau DELETE
dari suatu tabel. Sebagai contoh misalnya kita ingin menyimpan id pelanggan
secara otomatis ke tabel log sebelum menghapus data di tabel pelanggan.
Trigger adalah suatu objek database yang merupakan aksi atau prosedur yang
terjadi jika terjadi perubahan pada suatu row atau record. Trigger tidak dapat
menjadi bagian dari suatu temporary table atau suatu view.
Membuat Trigger
Berikut adalah query dasar membuat trigger:
DELIMITER $$
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name FOR EACH ROW
BEGIN
trigger_body
END $$
Keterangan:
trigger_name
: nama trigger
trigger_time
: kapan kita mengeksekusi trigger, apakah
sebelum [BEFORE] atau sesudah [AFTER] proses.
trigger_event
: merupakan event atau peristiwa yang
menyebabkan trigger dilakukan. Event yang dimaksud
adalah INSERT, UPDATE, DELETE.
table_name
: nama tabel.
trigger_body
: statement statement SQL yang akan
dilakukan. Jika perintahnya lebih dari satu, maka digunakan
blok statement BEGIN . . . END
Di dalam statement trigger, kita 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).
DELIMITER $$
CREATE TRIGGER doinsert_beforeupdate_grade BEFORE UPDATE ON grade
FOR EACH ROW
BEGIN
INSERT INTO log_grade
VALUES(new.grade_id,new.nilai,new.discount,NOW(),Before Update);
END $$
Query diatas akan menghasilkan trigger yang berfungsi melakukan insert data
pada log_grade ketika terjadi update data pada tabel grade. Record yang di
insert pada tabel log_grade merupakan record yang akan diupdate di tabel
grade. Dan juga akan ditambahkan tanggal kapan record tersebut dipudate serta
bagaimana trigger_time dan trigger_event yang digunakan.
Kemudian, lakukan insert dan record pada tabel grade menggunakan query
berikut:
INSERT INTO grade VALUES (D,0-50,0%);
Perhatikan pada tabel log_grade, apakah record yang baru ditambahkan pada
tabel grade juga ditambahkan pada tabel log_grade? Perhatikan pula field
tanggal dan prosesnya.
LATIHAN
Buatlah sebuah tabel baru yang mencatat aktifitas event pada tabel program.
Struktur tabel baru tersebut adalah sebagai berikut:
Field/ Kolom
program_id
program_name
fee
program_duration
tgl_event
eventnya
log_program
Tipe Data
VARCHAR
VARCHAR
DECIMAL
VARCHAR
DATE
VARCHAR
Panjang Data
5
30
10
30
Kemudian, buatlah 3 buah Trigger yang akan mencatat event (INSERT, UPDATE,
DELETE) yang terjadi pada tabel program. Untuk trigger_time silahkan dipilih
AFTER atau BEFORE. Setelah itu, lakukan insert, update, dan delete data pada
tabel program. Perhatikan apakah trigger yang dibuat sudah berhasil.
Record untuk di insert:
program_id
program_name
PB001
Grammar
fee
1000000
program_duration
24