trigger mysql
Database

Belajar MySQL Lanjut : Cara Membuat TRIGGER

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 TRIGGERKeterangan TRIGGER
BEFORE INSERTTRIGGER dijalankan sebelum record dimasukkan ke database
AFTER INSERTTRIGGER dijalankan sesudah record dimasukkan ke database
BEFORE UPDATETRIGGER dijalankan sebelum record dirubah di database
AFTER UPDATETRIGGER dijalankan sesudah record dirubah database
BEFORE DELETETRIGGER dijalankan sebelum record dihapus di database
AFTER DELETETRIGGER 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

Leave a Reply

Your email address will not be published. Required fields are marked *