Database
TRIGGER
BASIS DATA
2
Database
Trigger adalah blok perintah SQL
yang secara otomatis dijalankan
oleh sistem database saat terjadi
suatu peristiwa (event) pada
tabel, seperti:
• CInsert
• Update
• Delete
Fungsinya
• Otomatisasi Proses
• Validasi Data
Trigger • Loggig/Audit Trail
• Menjaga Integritas Data
Database
Jenis-jenis
Trigger
Definition:
BEFORE INSERT
AFTER INSERT
BEFORE UPDATE
AFTER UPDATE
BEFORE DELETE
AFTER DELETE
Database
• Sebelum data dimasukkan, sistem akan
mengecek atau memodifikasi nilai.
• Contoh Kasus: Menyimpan nama dalam huruf
kapital sebelum insert.
BEFORE
INSERT Contoh
SQL:
CREATE TRIGGER before_insert_kapital
BEFORE INSERT ON Mahasiswa
FOR EACH ROW
BEGIN
SET [Link] = UPPER([Link]);
END;
• Artinya: Saat data mahasiswa dimasukkan,
sistem otomatis mengubah kolom Nama
menjadi huruf kapital sebelum disimpan.
Database Contoh
SQL:
INSERT INTO Mahasiswa (NIM, Nama, Prodi)
VALUES ('231001', 'ani wijaya', 'Informatika');
BEFORE
INSERT Hasil:
NIM Nama Prodi
231001 ANI WIJAYA Informatika
Database
AFTER INSERT
• Setelah data berhasil dimasukkan, trigger akan
dijalankan.
• Contoh Kasus: Mencatat ke tabel log setelah
mahasiswa ditambahkan.
CREATE TRIGGER after_insert_log
AFTER INSERT ON Mahasiswa
FOR EACH ROW
BEGIN
INSERT INTO Log_Mahasiswa (NIM, Aksi, Waktu)
VALUES ([Link], 'Insert', NOW());
END;
• Artinya: Setelah data baru masuk ke tabel
Mahasiswa, sistem menyimpan catatan ke
tabel Log_Mahasiswa.
Database
AFTER INSERT
INSERT INTO Mahasiswa (NIM, Nama, Prodi)
VALUES ('231002', 'Budi Santoso', 'SI');
Hasil:
ID NIM Aksi Waktu
1 231002 Insert 2025-05-17 10:02:43
Database Contoh SQL:
CREATE TRIGGER
before_update_prodi
BEFORE BEFORE UPDATE ON Mahasiswa
FOR EACH ROW
BEGIN
UPDATE
IF USER() NOT LIKE '%admin%'
THEN
SIGNAL SQLSTATE '45000'
• Sebelum data diubah, trigger dijalankan SET MESSAGE_TEXT = 'Hanya
untuk validasi atau manipulasi. admin yang boleh mengubah
Prodi';
• Contoh Kasus: Cegah perubahan nilai END IF;
Prodi jika bukan ‘Admin’. END;
• Artinya: Validasi bahwa hanya user
tertentu (admin) yang boleh mengubah
Prodi.
Database Contoh SQL:
UPDATE Mahasiswa
SET Prodi = 'Teknik Sipil'
BEFORE WHERE NIM = '231002';
• Hasil
UPDATE • Error: Hanya
mengubah Prodi
admin yang boleh
Database
AFTER UPDATE
• Setelah data berhasil diperbarui, trigger
dijalankan.
• Contoh Kasus: Simpan riwayat perubahan IPK
mahasiswa.
CREATE TABLE Riwayat_IPK (
NIM VARCHAR(10),
IPK_Lama DECIMAL(3,2),
IPK_Baru DECIMAL(3,2),
Tanggal_Update DATETIME
);
• Artinya: Setelah IPK mahasiswa diperbarui,
sistem menyimpan histori perubahan ke tabel
Riwayat_IPK.
Database
AFTER UPDATE
• Catat perubahan IPK ke tabel riwayat.
CREATE TRIGGER after_update_ipk
AFTER UPDATE ON Mahasiswa
FOR EACH ROW
BEGIN
IF [Link] <> [Link] THEN
INSERT INTO Riwayat_IPK (NIM, IPK_Lama, IPK_Baru,
Tanggal_Update)
VALUES ([Link], [Link], [Link], NOW());
END IF;
END;
• UPDATE Mahasiswa SET IPK = 3.75 WHERE NIM =
'231001';
NIM IPK_Lama IPK_Baru Tanggal_Update
2025-05-17
231001 3.50 3.75 10:10:20
Database
CREATE TRIGGER before_delete_mhs
BEFORE BEFORE DELETE ON Mahasiswa
FOR EACH ROW
BEGIN
DELETE
IF [Link] = 'Aktif' THEN
SIGNAL SQLSTATE '45000'
• Sebelum data dihapus, sistem bisa
SET MESSAGE_TEXT = 'Data mahasiswa
memverifikasi atau mencegah
aktif tidak boleh dihapus!';
penghapusan.
• Contoh Kasus: Cegah penghapusan END IF;
mahasiswa dengan status ‘Aktif’. END;
• Artinya: Mahasiswa yang statusnya
masih aktif tidak dapat dihapus dari
database.
Database
DELETE FROM Mahasiswa
BEFORE WHERE NIM = '231001';
Error: Data mahasiswa aktif tidak boleh
DELETE dihapus!
• Setelah data berhasil dihapus, catat
Database
penghapusan tersebut.
• Contoh Kasus: Simpan ke log jika data
mahasiswa dihapus.
CREATE TABLE Log_Hapus (
NIM VARCHAR(10),
Nama VARCHAR(100),
Waktu_Hapus DATETIME
);
AFTER
DELETE • Artinya: Setelah mahasiswa dihapus, data
mereka dicatat di tabel log.
CREATE TRIGGER after_delete_mhs
Database AFTER DELETE ON Mahasiswa
FOR EACH ROW
BEGIN
INSERT INTO Log_Hapus (NIM, Nama,
Waktu_Hapus)
VALUES ([Link], [Link], NOW());
END;
• DELETE FROM Mahasiswa WHERE NIM =
'231002';
NIM Nama Waktu_Hapus
231002 BUDI SANTOSO 2025-05-17 10:13:55
AFTER
DELETE
Database
TIPS UMUM
MENGGUNAKAN TRIGGER
Gunakan BEFORE saat ingin mencegah atau mengubah sebelum data masuk.
Gunakan AFTER saat ingin melakukan tindakan setelah berhasil (seperti logging).
Hindari trigger berantai terlalu banyak, agar tidak mempengaruhi performa
sistem.
-