Aktivitas Praktikum
Pada bagian ini, mahasiswa akan mempraktikkan secara langsung penggunaan trigger pada MySQL. Aktivitas disusun secara bertahap, mulai dari membuat BEFORE INSERT trigger, menguji perubahan nilai otomatis, mencoba batasan trigger pada tabel yang sama, membuat AFTER UPDATE trigger untuk pencatatan log, menampilkan trigger yang sudah dibuat, hingga menghapus trigger. Kerjakan setiap aktivitas secara berurutan agar fungsi dan perilaku trigger dapat dipahami dengan baik.
Sebelum mulai praktik, pastikan database PRAK2 sudah tersedia dan tabel employee masih ada dari pertemuan sebelumnya.
Aktivitas 1 — Menyiapkan Data Praktikum
Percobaan 1.1 — Mengaktifkan database kerja
USE PRAK2;Gunakan perintah ini untuk memastikan seluruh percobaan dijalankan pada database yang benar.
Percobaan 1.2 — Menampilkan daftar tabel
SHOW TABLES;Perintah ini digunakan untuk memastikan tabel employee sudah tersedia.
Percobaan 1.3 — Menampilkan struktur tabel employee
DESC employee;Perintah ini digunakan untuk memastikan kolom-kolom yang akan dipakai pada trigger, seperti id, salary, dan description, tersedia pada tabel employee.
Aktivitas 2 — Membuat BEFORE INSERT Trigger
Percobaan 2.1 — Mengganti delimiter
DELIMITER //Perintah ini digunakan agar body trigger yang terdiri dari beberapa statement dapat ditulis dengan aman.
Percobaan 2.2 — Membuat trigger before_insert
CREATE TRIGGER before_insert BEFORE INSERT ON employee
FOR EACH ROW
BEGIN
IF NEW.salary IS NULL OR NEW.salary = 0 THEN
SET NEW.salary = 1000;
ELSE
SET NEW.salary = NEW.salary + 100;
END IF;
END //Perintah ini digunakan untuk membuat trigger yang akan dijalankan sebelum data dimasukkan ke tabel employee.
Percobaan 2.3 — Mengembalikan delimiter
DELIMITER ;Perintah ini digunakan untuk mengaktifkan kembali delimiter default.
Aktivitas 3 — Menguji BEFORE INSERT Trigger
Percobaan 3.1 — Menambahkan data dengan salary bernilai 0
INSERT INTO employee(id, first_name, last_name, start_date, end_date, salary, city, description)
VALUES (1, 'John', 'Doe', '1996-07-25', '2006-07-25', 0, 'Canberra', 'Programmer');Perintah ini digunakan untuk menguji apakah trigger akan mengubah salary yang bernilai 0 menjadi 1000.
Percobaan 3.2 — Menampilkan data yang baru dimasukkan
SELECT * FROM employee WHERE first_name = 'John';Perintah ini digunakan untuk memeriksa hasil perubahan salary setelah trigger dijalankan.
Aktivitas 4 — Mencoba Batasan Trigger pada Tabel yang Sama
Percobaan 4.1 — Mengganti delimiter
DELIMITER &&Percobaan 4.2 — Membuat trigger before_update yang mencoba mengupdate tabel yang sama
CREATE TRIGGER before_update BEFORE UPDATE ON employee
FOR EACH ROW
BEGIN
UPDATE employee
SET salary = salary + (NEW.salary - OLD.salary)
WHERE id = NEW.id;
END &&Percobaan ini digunakan untuk menunjukkan batasan bahwa trigger tidak boleh mengubah tabel yang sama dengan tabel yang sedang memicunya.
Percobaan 4.3 — Mengembalikan delimiter
DELIMITER ;Percobaan 4.4 — Mencoba menjalankan update pada tabel employee
UPDATE employee SET salary = 1000 WHERE id = 1;Perintah ini digunakan untuk menunjukkan bahwa MySQL akan menampilkan error ketika trigger mencoba mengubah tabel yang sama.
Aktivitas 5 — Membuat AFTER UPDATE Trigger untuk Log
Percobaan 5.1 — Membuat tabel trans_log
CREATE TABLE trans_log(
user_id VARCHAR(15),
description VARCHAR(50)
);Tabel ini digunakan untuk mencatat perubahan salary pada tabel employee.
Percobaan 5.2 — Mengganti delimiter
DELIMITER $$Percobaan 5.3 — Membuat trigger log_salary
CREATE TRIGGER log_salary AFTER UPDATE
ON employee
FOR EACH ROW
BEGIN
INSERT INTO trans_log
VALUES (USER(), CONCAT('merubah akun ', NEW.id, ' dari ', OLD.salary, ' to ', NEW.salary));
END $$Perintah ini digunakan untuk membuat trigger setelah update yang akan mencatat perubahan salary ke tabel trans_log.
Percobaan 5.4 — Mengembalikan delimiter
DELIMITER ;Aktivitas 6 — Menguji AFTER UPDATE Trigger
Percobaan 6.1 — Mengupdate salary seluruh employee
UPDATE employee SET salary = salary + 1000;Perintah ini digunakan untuk memicu trigger log_salary pada seluruh baris data di tabel employee.
Percobaan 6.2 — Menampilkan isi tabel trans_log
SELECT * FROM trans_log;Perintah ini digunakan untuk memeriksa apakah perubahan salary berhasil dicatat ke tabel log.
Aktivitas 7 — Melihat Trigger yang Sudah Dibuat
Percobaan 7.1 — Menampilkan seluruh trigger pada database PRAK2
SHOW TRIGGERS IN PRAK2\GPerintah ini digunakan untuk menampilkan informasi trigger yang sudah dibuat, termasuk nama trigger, event, tabel, statement, dan timing.
Aktivitas 8 — Menghapus Trigger
Percobaan 8.1 — Menghapus trigger before_insert
DROP TRIGGER before_insert;Perintah ini digunakan untuk menghapus trigger before_insert.
Percobaan 8.2 — Menampilkan kembali trigger yang masih tersisa
SHOW TRIGGERS IN PRAK2\GPerintah ini digunakan untuk memastikan trigger yang dihapus sudah tidak ada lagi.
Catatan Akhir Aktivitas
Seluruh percobaan pada halaman ini disusun mengikuti alur modul pertemuan 6, mulai dari pembuatan BEFORE INSERT trigger, pengujian nilai NEW, percobaan batasan trigger pada tabel yang sama, pembuatan AFTER UPDATE trigger, pencatatan perubahan ke tabel log, penampilan trigger dengan SHOW TRIGGERS, hingga penghapusan trigger dengan DROP TRIGGER. Dengan menyelesaikan seluruh aktivitas ini, mahasiswa diharapkan tidak hanya mampu membuat trigger, tetapi juga memahami kapan trigger dijalankan, data apa yang dapat diakses, dan batasan penting dalam penggunaannya.