Basis Data: Prosedur, Fungsi, dan Trigger
Oleh: Nabilla Dwi Putri Paraswati — NPM: 2505060059 Program Studi Teknologi Informasi, Fakultas Teknik
Basis Data: Prosedur, Fungsi, dan Trigger
Oleh: Nabilla Dwi Putri Paraswati — NPM: 2505060059 Program Studi Teknologi Informasi, Fakultas Teknik

New day, new lab report. Nabil hereee, and today’s session is all about Procedure, Function, and Trigger. Ready to explore the breakdown with me? let’s goowww dive in!
Pendahuluan
Di pertemuan kali ini kita akan membahas tentang tiga fitur yang ada di MYSQL, yang akan otomatis jalan dan pastinya efisien. Fiturnya adalah Stored Procedure, Function, dan Trigger. Misalnya kita mau membuat aplikasi yang skalanya besar, nah terus di tiap transaksi kita harus kirim query SQL berkali-kali ke database, pasti ribetkan? Nah jadi di pertemuan ini kita akan bahas itu semua, dari dasar sampai cara implementasinya ke studi kasus yang ada yaitu toko buku online.
Pada praktikum kali ini, perangkat dan tools yang digunakan adalah:
- Laptop dengan koneksi internet
- Sistem Operasi Windows/Mac/Linux
- Perangkat lunak seperti XAMPP (untuk mengaktifkan web server dan MYSQL/MariaDB)
A. Stored Procedure
Stored Procedure adalah sekumpulan statement atau perintah SQL yang disusun sedemikian rupa, dikompilasi, dan disimpan sebagai satu objek di dalam server database dengan nama tertentu.
Keuntungan jika menggunakan stored procedure yaitu:
- Lebih cepat: karena melewati proses prekompilasi di server, eksekusi kode jadi jauh lebih cepat dibandingkan dengan mengirimkan perintah satu-satu.
- Mengurangi lalu lintas: Jadi, aplikasi hanya perlu mengirimkan satu baris perintah panggilan, dan seluruh proses berat akan diselesaikan secara internal didalam server
- Keamanan basis data: Kita juga bisa membatasi hak akses pengguna aplikasi supaya mereka tidak bisa memanipulasi atau melihat isi tabel yang bukan haknya.
Sintaks dasar untuk pembuatan stored procedure adalah :
CREATE PROCEDURE nama_procedure ([parameter] [tipe_data])
BEGIN
[perintah deklarasi]
[perintah eksekusi]
END;
nah untuk menjalankannya, nanti hanya perlu memanggilnya pakai perintah
CALL nama_procedure();
B. Function (Fungsi Pengguna)
Function atau User Defined Function(UDF) ini mirip seperti stored procedure. Tetapi, ada satu perbedaan yakni Function itu wajib mengembalikan sebuah nilai(return value) kepada sistem. Kalau di matematika, mirip fungsi f(x) = y. Jadi kita memberikanparameter input dan fungsi akan mengolahnya lalu akan mengembalikan hasilnya ke barisan perintah. Nah, keunggulan dari fungsi itu dia bisa langsung disisipkan di dalam perintah manipulasi data misalnya SELECT
Sintaks dasar pembuatan function :
CREATE FUNCTION nama)fungsi ([parameter] [tipe_data])
RETURNS [tipe_data_return]
BEGIN
[perintah deklarasi]
[perintah eksekusi]
RETURN nilai_kembalian;
END;
C. Trigger
Trigger adalah himpunan kode prosedural yang akan dieksekusi secara otomatis oleh sistem sebagai respon atas suatu kejadian(event) yang menimpa suatu tabel. Kejadian pemicu itu biasanya adalah INSERT, UPDATE, atau DELETE.
Kalau berdasarkan waktunya, trigger dinagi dua jenis yaitu:
- BEFORE : Dieksekusi sebelum data baru masuk atau dimodifikasi ke dalam tabel
- AFTER : Dieksekusi sesudah pernyataan yang berkorespondensi selesai dijalankan secara permanen
Perbedaannya dengan stored procedure adalah kalau procedure harus di panggil menggunakan perintah CALL, nah kalau trigger dia akan berjalan sendiri tanpa pemanggilan dari pengguna.
Praktikum
Pertama-tama, kita akan membuat database baru yang diberi nama universitas, lalu membuat tabel mahasiswa dengan strukturnya, saya menggunakan localhost untuk melakukan praktikum ini.
Query tabel mahasiswa :
CREATE TABLE mahasiswa (
NPM VARCHAR(15) PRIMARY KEY,
nama VARCHAR(100),
alamat VARCHAR(150),
id_kelurahan INT NULL,
jenis_kelamin ENUM ('L', 'P') ,
no_hp VARCHAR(15),
kode_prodi INT NULL
);
Lalu masukkan isi tabel menggunakan insert
Querynya :
INSERT INTO mahasiswa (NPM, nama, alamat, id_kelurahan, jenis_kelamin, no_hp, kode_prodi) VALUES
('12345', 'Imam Adi Nata', 'Kajen', 1, 'L', '081215529989', 1),
('12346', 'Budi Sugandhi', 'Bekasi', 109, 'L', '085643433321', 2),
('12347', 'Toha Sitohang', 'Medan', 103, 'L', '08989787876', 2),
('12348', 'Megawati', 'Condong Catur', 107, 'P', '0839303058', 1),
('12349', 'Prabowo Subiyanto', 'JKT', 107, 'L', '08132809811', NULL),
('12780', 'Anis Baswedan', 'Jakarta', 234, 'L', '09898877663', NULL),
('12786', 'Ganjar Pranowo', 'Jawa Tengah', 123, 'L', '087656356622', NULL);
Maka hasilnya akan seperti ini :

- Stored Procedure
Selanjutnya, kita akan membuat stored procedure yang akan digunakan untuk melihat data mahasiswa secara sederhana yang akan menampilkan kolom NPM, nama, dan no_hp.
Querynya:
DELIMITER //
CREATE PROCEDURE view_mhs_simple()
BEGIN
SELECT NPM, nama, no_hp FROM mahasiswa;
END //
Lalu untuk lakukan pemanggilan, querynya adalah:
CALL view_mhs_simple();
Data yang akan ditampilkan adalah:

- Function
Selanjutnya, kita akan melakukan function, Function hampir sama seperti procedure, yang membedakan itu function akan mengembalikan nilai sedangkan procedure tidak, mari kita coba melakukan function dengan query berikut:
DELIMITER $$
CREATE FUNCTION tambah(angka1 INT, angka2 INT)
RETURNS INT
BEGIN
RETURN angka1 + angka2;
END; $$
Lalu untuk melakukan pemanggilan kita bisa menggunakan perintah SELECT seperti pada perintah berikut:
SELECT tambah(4,8)
Maka data yang akan ditampilkan adalah :

- Trigger
Di Trigger kita akan menggunakan dua tabel yang bernama barang dan pembelian.
- Tabel barang

- Tabel pembelian

Berdasarkan arahan di atas, kita akan membuat tabel baru yaitu tabel barang dan tabel transaksi
Query tabel barang:
CREATE TABLE barang (
id_brg VARCHAR(10) PRIMARY KEY,
nama_brg VARCHAR(50),
stok INT
);
Query tabel transaksi:
CREATE TABLE pembelian (
id_pem INT AUTO_INCREMENT PRIMARY KEY,
id_brg VARCHAR(10),
jml_beli INT,
FOREIGN KEY (id_brg) REFERENCES barang(id_brg)
);
Lalu kita akan mengisi tabel yang sudah kita buat:
Query barang :
INSERT INTO barang (id_brg, nama_brg, stok) VALUES
('A10', 'Mouse', 10),
('A11', 'Keyboard', 15),
('A12', 'DVD R-W', 10);
Jadi nanti hasilnya akan seperti ini:

Query pembelian
INSERT INTO pembelian (id_pem, id_brg, jml_beli) VALUES
('1', 'A10', 5);
Hasilnya:

Selanjutnya kita akan melakukan trigger

Lalu jika sudah membuat trigger, langkah selanjutnya adalah kembali ke sql dan memasukkan syntax berikut:
INSERT INTO barang VALUES ('A13', 'Modem', 5);
Maka hasilnya akan seperti ini :

Selanjutnya kita akan mencoba menghapus trigger, sama seperti database lainnya, cara menghapusnya bisa menggunakan drop. Bisa menggunakan syntax berikut :
DROP TRIGGER nama_trigger;
atau bisa menggunakan cara berikut :

bisa klik “hapus” seperti pada gambar di atas, lalu akan muncul pop up klik “oke”
- Keyword Old and New

Setelah berhasil, cek tabel barang menggunakan query:
SELECT * FROM barang
Maka hasilnya akan :

Kemudian, saya akan melakukan penambahan data dengan menggunakan query :
INSERT INTO pembelian (id_pem, id_brg, jml_beli) VALUES ('2', 'A10', '10');
lalu cek data barang dengan query :
SELECT * FROM barang
maka hasilnya akan seperti ini:

- DELETE TRIGGER
Selanjutnya kita akan mencoba menghapus data trigger

karena sebelumnya aku sudah memasukkan data A10 ke pembelian, maka aku akan menghapusnya terlebih dahulu. Lalu jika sudah saya akan melakukan uji coba menghapus data di tabel barang menggunakan query :
DELETE FROM barang WHERE id_brg ='A10';

lalu kita akan cek datanya menggunakan query:
SELECT * FROM pembelian
Hasilnya:

- UPDATE TRIGGER

Selanjutkan lakukan update pada tabel pembelian, dengan query:
UPDATE pembelian SET jml_beli = 20 WHERE id_pem=3
Lalu kita cek:

- Trigger Kompleks

TUGAS
- Membuat database toko_buku
CREATE DATABASE toko_buku;
USE toko_buku;
- Membuat struktur tabel
- Tabel Buku
Query :
CREATE TABLE buku (
id_buku INT AUTO_INCREMENT PRIMARY KEY,
judul VARCHAR(100),
penulis VARCHAR(100),
harga DECIMAL(10,2),
stok INT
);
- Tabel Pelanggan
Query:
CREATE TABLE pelanggan (
id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100),
total_belanja DECIMAL(10,2) DEFAULT 0,
status_member ENUM('REGULER', 'GOLD', 'PLATINUM') DEFAULT 'REGULER'
);
- Tabel Transaksi
Query:
CREATE TABLE transaksi (
id_transaksi INT AUTO_INCREMENT PRIMARY KEY,
id_pelanggan INT,
id_buku INT,
jumlah INT,
total_harga DECIMAL(10,2),
tanggal_transaksi DATE,
FOREIGN KEY (id_pelanggan) REFERENCES pelanggan(id_pelanggan),
FOREIGN KEY (id_buku) REFERENCES buku(id_buku)
);
Saya akan menambahkan data ke dalam tabel agar bisa dilaukan pengecekan
- Data buku
INSERT INTO buku (judul, penulis, harga, stok)
VALUES
('Percy Jackson', 'Rick Riordian', 150000, 20),
('The Chronicles of Narnia', 'C.S. Lewis', 200000, 15),
('Harry Potter', 'J.K. Rowling', 250000, 10);
- Data Pelanggan
INSERT INTO pelanggan (nama)
VALUES
('Nabilla'),
('Dwi'),
('Paraswati');
Selanjutnya kita lakukan pengetesan database
- Function : Hitung Diskon Pelanggan
DELIMITER $$
CREATE FUNCTION hitung_diskon
(
total_belanja DECIMAL(10,2)
)
RETURNS DECIMAL(5,2)
DETERMINISTIC
BEGIN
DECLARE diskon DECIMAL(5,2);
IF total_belanja < 1000000 THEN
SET diskon = 0;
ELSEIF total_belanja < 5000000 THEN
SET diskon = 5;
ELSE
SET diskon = 10;
END IF;
RETURN diskon;
END$$
DELIMITER ;
Lakukan pengecekan:
SELECT hitung_diskon(500000);

SELECT hitung_diskon(2000000);

SELECT hitung_diskon(6000000);

- Stored Procedure: Tambah Transaksi
DELIMITER $$
CREATE PROCEDURE tambah_transaksi
(
IN p_id_pelanggan INT,
IN p_id_buku INT,
IN p_jumlah INT
)
BEGIN
DECLARE v_harga DECIMAL(10,2);
DECLARE v_stok INT;
DECLARE v_total DECIMAL(10,2);
SELECT harga, stok
INTO v_harga, v_stok
FROM buku
WHERE id_buku = p_id_buku;
IF v_stok < p_jumlah THEN
SELECT 'ERROR : Stok tidak mencukupi'
AS pesan;
ELSE
SET v_total = v_harga * p_jumlah;
UPDATE buku
SET stok = stok - p_jumlah
WHERE id_buku = p_id_buku;
INSERT INTO transaksi
(
id_pelanggan,
id_buku,
jumlah,
total_harga,
tanggal_transaksi
)
VALUES
(
p_id_pelanggan,
p_id_buku,
p_jumlah,
v_total,
CURDATE()
);
UPDATE pelanggan
SET total_belanja =
total_belanja + v_total
WHERE id_pelanggan = p_id_pelanggan;
SELECT 'Transaksi berhasil'
AS pesan;
END IF;
END$$
DELIMITER ;
Melakukan pemanggilan :
CALL tambah_transaksi(1,1,2);

Melihat hasil transaksi :
SELECT * FROM transaksi;

- TRIGGER : Update Status Member Otomatis
DELIMITER $$
CREATE TRIGGER trg_status_member
BEFORE UPDATE
ON pelanggan
FOR EACH ROW
BEGIN
IF NEW.total_belanja >= 5000000 THEN
SET NEW.status_member = 'PLATINUM';
ELSEIF NEW.total_belanja >= 1000000 THEN
SET NEW.status_member = 'GOLD';
ELSE
SET NEW.status_member = 'REGULER';
END IF;
END$$
DELIMITER ;
Pengujian trigger
UPDATE pelanggan SET total_belanja = 2000000 WHERE id_pelanggan = 2;
UPDATE pelanggan SET total_belanja = 6000000 WHERE id_pelanggan = 3;

Kesimpulan
Berdasarkan teori dan praktikum yang sudah dilakukan, kesimpulan yang bisa saya ambil adalah konsep Stored Porcedure, Function, dan Trigger bisa digunakan uuntuk menyimpan sekumpulan perintah di sql supaya proses pemgolahan data lebih cepat, rapi dan efisien, Function digunakan untuk mengolah data yang mengembalikan nilainya, sementara itu trigger berfungsi menjalankan perintah secara otomatis .
And that’s it for today’s session. Another lab, another lesson learned. See you in the next breakdown! thankiesss for exploring with me~~~
Referensi
Ahmad Nugroho, S.Kom., M.Kom.(2026).MODUL 9 — Prosedur, Fungsi dan Trigger. [Modul 9]
메타데이터
- post_id
- 48fc29c828cc
- slug
- basis-data-prosedur-fungsi-dan-trigger-48fc29c828cc
- url
- https://medium.com/@nabillaparaswati/basis-data-prosedur-fungsi-dan-trigger-48fc29c828cc
- canonical_url
- https://medium.com/@nabillaparaswati/basis-data-prosedur-fungsi-dan-trigger-48fc29c828cc
- author_url
- https://medium.com/@nabillaparaswati
- status
- ok
- fetched_at
- 2026-06-18 00:10:23