TRIGGER adalah kumpulan kode SQL yang berjalan secara otomatis untuk mengeksekusi perintah INSERT, UPDATE, DELETE.
Biasanya TRIGGER akan dijalankan sebelum atau sesudah proses INSERT, UPDATE, DELETE (Perintah DML)
Cara penulisan TRIGGER
DELIMITER $$
CREATE TRIGGER nama_trigger
{BEFORE | AFTER} {INSERT | UPDATE| DELETE }
ON nama_table
FOR EACH ROW
BEGIN
KODE SQL
END$$
DELIMITER ;
Untuk memulai menggunakan TRIGGER kita gunakan CREATE TRIGGER dilanjutkan nama TRIGGER yang ingin dibuat
{BEFORE | AFTER} adalah waktu TRIGGER akan dijalankan, apakah sebelum atau sesudah database dimodifikasi oleh perintah DML
{INSERT | UPDATE | DELETE} adalah perintah DML yang mengaktifkan TRIGGER
Lebih detail waktu TRIGGER akan dijelaskan di tabel berikut
Waktu TRIGGER | Keterangan TRIGGER |
BEFORE INSERT | TRIGGER dijalankan sebelum record dimasukkan ke database |
AFTER INSERT | TRIGGER dijalankan sesudah record dimasukkan ke database |
BEFORE UPDATE | TRIGGER dijalankan sebelum record dirubah di database |
AFTER UPDATE | TRIGGER dijalankan sesudah record dirubah database |
BEFORE DELETE | TRIGGER dijalankan sebelum record dihapus di database |
AFTER DELETE | TRIGGER dijalankan sesudah record dihapus di database |
ON mendefinisikan table yang mengaktifkan TRIGGER
BEGIN END adalah pernyataan yang membungkus kode TRIGGER
Pastikan diawal gunakan DELIMITER $$ dan diakhir dikembalikan ke DELIMITER ; seperti dalam membuat Stored Procedure
Hands On
Pada Hands-On TRIGGER akan dibuat 2 table yaitu table mahasiswa dan table log_mahasiswa
Table mahasiswa -> menyimpan data mahasiswa Table log_mahasiswa -> menyimpan perubahan data mahasiswa
Jadi setiap ada perubahan data (UPDATE) alamat mahasiswa pada table mahasiswa maka akan disimpan di table log_mahasiwa tentang histori perubahan data alamat tersebut.
Dengan adanya log perubahan data mahasiswa maka akan memudahkan dalam melihat histori data mahasiswa yang pernah berubah dalam sistem.
Table mahasiswa
CREATE TABLE mahasiswa ( nim INT(10), nama VARCHAR(100), alamat VARCHAR(100), PRIMARY KEY(nim) ); INSERT INTO mahasiswa VALUES (21400200,"faqih","bandung"), (21400201,"ina","jakarta"), (21400202,"anto","semarang"), (21400203,"dani","padang"), (21400204,"jaka","bandung"), (21400205,"nara","bandung"), (21400206,"senta","semarang");
P.S. Referensi contoh membuat table dan record dapat dibaca di materi DDL dan DML
Table log_mahasiswa
CREATE TABLE log_mahasiswa ( id_log INT(10) AUTO_INCREMENT, nim INT(10), alamat_lama VARCHAR(100), alamat_baru VARCHAR(100), waktu DATE, PRIMARY KEY(id_log) );
Membuat TRIGGER
Kita akan menyimpan data perubahan alamat sebelum perintah UPDATE dijalankan
DELIMITER $$ CREATE TRIGGER update_alamat_mahasiswa BEFORE UPDATE ON mahasiswa FOR EACH ROW BEGIN INSERT INTO log_mahasiswa set nim = OLD.nim, alamat_lama=old.alamat, alamat_baru=new.alamat, waktu = NOW(); END$$ DELIMITER ;
Keyword OLD digunakan untuk mengambil data kolom di table yang lama sedangkan keyword NEW digunakan untuk mengambil data kolom di table yang baru
Sekarang kita akan coba update alamat mahasiswa dengan NIM 21400200. Sebelum diupdate alamat mahasiswa dengan NIM 21400200 adalah “bandung”
Kita ganti alamat “bandung” menjadi “surabaya”
UPDATE mahasiswa SET alamat = 'surabaya' WHERE nim = 21400200;
Sekarang coba lakukan perintah SELECT untuk melihat table log_mahasiswa
> SELECT * FROM log_mahasiswa; +--------+----------+-------------+-------------+------------+ | id_log | nim | alamat_lama | alamat_baru | waktu | +--------+----------+-------------+-------------+------------+ | 1 | 21400200 | bandung | surabaya | 2019-11-02 | +--------+----------+-------------+-------------+------------+ 1 row in set (0.00 sec)
Oke, record baru secara otomatis telah ditambahkan ke table log_mahasiswa untuk mahasiswa dengan NIM 21400200 yang telah diubah alamat awal “bandung” menjadi “surabaya”
Sedangkan pada table mahasiswa alamat yang tercantum adalah alamat yang baru
> SELECT * FROM mahasiswa WHERE nim=21400200; +----------+-------+----------+ | nim | nama | alamat | +----------+-------+----------+ | 21400200 | faqih | surabaya | +----------+-------+----------+ 1 row in set (0.00 sec)
Materi MySQL dibagi menjadi beberapa tutorial antara lain:
Cara Install XAMPP di Windows dan Linux
Belajar MySQL Dasar : Tutorial MySQL untuk Pemula
Belajar MySQL Dasar : Memahami perintah DDL
Belajar MySQL Dasar : Memahami perintah DML
Belajar MySQL Dasar : Memahami perintah DQL
Belajar MySQL Dasar : Memahami perintah DCL
Belajar MySQL Dasar : Memahami perintah TCL
Belajar MySQL Lanjut : Cara Menggunakan JOIN
Belajar MySQL Lanjut : Cara Membuat Stored Procedure
Belajar MySQL Lanjut : Cara Membuat VIEW
Belajar MySQL Lanjut : Cara Membuat TRIGGER
Belajar MySQL Lanjut : DDL MySQL dengan Python
Belajar MySQL Lanjut : DML MySQL dengan Python
Belajar MySQL Lanjut : DQL MySQL dengan Python
cara menghapus triggernya gimana min
DROP TRIGGER name_trigger;
cara nambah trigger untuk after insert apa ya kak
Ditambahkan di dalam kode BEGIN – END sesudah trigger pertama
min, cara menggunakan operator perkalian di trigger gimana ya? aku udah nyoba make set trus dikaliin antar kolom tetep ga kebaca juga di tabelnya pas udah di insert.