BASIS DATA: Stored Procedure, Function, and Trigger
Pendahuluan
BASIS DATA: Stored Procedure, Function, and Trigger

Source: Picture by CodeLucky on youtube
Pendahuluan
A. Dasar Teori — Stored Procedure Stored Procedure merupakan sekumpulan perintah dalam SQL yang dirancang secara sistematis untuk menjalankan tugas tertentu. Perintah ini digunakan untuk mempermudah pengolahan data dengan mendekatkan kode program pada data itu sendiri, sehingga menjadi lebih efisien. Stored procedure biasanya disimpan dengan nama unik yang dapat diprekompilasi (Kadir, 2002). Penggunaan stored procedure memberikan beberapa keuntungan dalam pengelolaan basis data, di antaranya:
- Meningkatkan kecepatan eksekusi, karena stored procedure telah dikompilasi
- Mengefisiensi intensitas lalu lintas data jaringan, karena proses data dilakukan secara langsung pada server
- Dapat mendukung pemrograman modular, karena stored procedure dapat memanggil stored procedure lainnya
- Dapat mengoptimalkan keamanan database. Jika seluruh akses user dilakukan melalui stored procedure, maka akses langsung ke tabel dan data dapat dikendalikan.
Stored procedure ini memiliki dua jenis tipe, yaitu prosedur bawaan sistem (system-defined) dan prosedur yang dibuat sendiri oleh pengguna (user-defined). Dalam membuat stored procedure dapat dilakukan dengan menggunakan perintah khusus sebagai berikut:
CREATE PROCEDURE [nama_procedure] ([parameter] [tipe data])
BEGIN
[perintah deklarasi]
[perintah eksekusi]
END;
Kemudian stored procedure tersebut dapat dieksekusi dan dijalankan dengan perintah berikut ini.
CALL [nama procedure];
Dalam Stored Procedure terdapat konsep parameter yang dapat mengirimkan data ke dalam prosedur untuk diproses lebih lanjut. Fitur ini membuat stored procedure menjadi lebih fleksibel dalam penggunaannya (Kadir, 2002).
— Function Function yaitu suatu program terstruktur yang terdiri dari sekumpulan perintah SQL dan disimpan sebagai objek di dalam basis data yang dapat mengembalikan suatu nilai. MySQL menyediakan fitur User Defined Function (UDF) yang memberikan keleluasaan bagi pengguna untuk membuat fungsinya sendiri seperti stored procedure. Dalam membuat function dapat dilakukan dengan perintah berikut ini.
CREATE FUNCTION [nama_fungsi] ([parameter] [tipe data])
RETURNS [tipe data return]
BEGIN
[perintah deklarasi]
[perintah eksekusi]
RETURN .....
END:
Keterangan: ~ *RETURNS → menentukan tipe data dari nilai yang akan dikembalikan oleh fungsi ke sistem ~ RETURN* → mengembalikan hasil eksekusi dari fungsi secara fisik ke sistem.
Dalam fungsi terdapat pernyataan (statements) valid yang dapat digunakan di dalamnya, antara lain:
- SET
- WHILE
- IF
- DECLARE
- SELECT
- INSERT
- UPDATE
- DELETE
Kemudian pemanggilan fungsi tersebut dapat dilakukan dengan menggunakan perintah berikut ini.
SELECT [nama fungsi] ([value]);
Dalam operasi MySQL stored procedure dan function sama-sama dapat digunakan untuk mengelola data di dalamnya, namun keduanya memiliki perbedaan yang terletak pada kewajiban nilai. Stored procedure tidak wajib mengembalikan nilai, sedangkan function harus selalu mengembalikan suatu nilai.
— Trigger Trigger merupakan sekumpulan kode (prosedural) yang dieksekusi secara otomatis sebagai respons terhadap suatu peristiwa (event)yang terjadi dalam tabel basis data. Event utama yang dapat memunculkan trigger yaitu pernyataan INSERT, UPDATE, dan DELETE. Trigger diklasifikasikan dalam beberapa kategori sebagai berikut.
- Berdasarkan ruang lingkupnya:
- Row Trigger (Trigger baris) — memenuhi setiap baris tabel yang mengalami perubahan
- Statement Trigger (Trigger pernyataan) — memenuhi pernyataan secara keseluruhan berdasarkan INSERT, UPDATE, atau DELETE, tanpa memperhatikan jumlah baris yang terpengaruh
- Berdasarkan waktu eksekusi (Behavior/Time):
- BEFORE — dijalankan sebelum pernyataan yang berkorespondensi seusai diterapkan pada tabel target
- AFTER — dijalankan setelah pernyataan yang berkorespondensi seusai diterapkan pada tabel target
Terkadang trigger diyakini sebagai bentuk spesifik dari stored procedure karena struktur penulisannya sama. Meskipun demikian, keduanya memiliki perbedaan yang terletak pada cara pemanggilannya, yaitu trigger dijalankan secara otomatis ketika suatu event terjadi, sedangkan stored procedure harus dijalankan secara eksplisit oleh pengguna. MySQL telah telah terintegrasi dengan fitur trigger, stored procedure dan view sejak versi 5.0.2. Seperti objek basis data lainnya, trigger dirancang menggunakan perintah CREATE. Berikut ini sintaks yang digunakan untuk mendefinisikan trigger.
CREATE
[DEFINER = {user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR BACH ROW trigger_stmt
MySQL menerapkan aturan bahwa tidak diperbolehkan adanya multiple trigger yang memiliki kombinasi waktu aksi (time) dan peristiwa (event) yang sama pada satu tabel tunggal. Sebagai contoh, jika pada Tabel_A telah didefinisikan trigger AFTER INSERT, maka pembuatan trigger AFTER INSERT baru pada tabel tersebut akan ditolak oleh sistem. Namun, pembuatan trigger dengan kombinasi berbeda pada tabel tersebut, seperti BEFORE (INSERT, EDIT, dan DELET), AFTER EDIT, atau AFTER DELETE tetap bisa dilakukan.
B. Tujuan Berdasarkan penjelasan tersebut, adanya praktikum ini bertujuan untuk:
- Mengetahui dan memahami Stored Procedure, Function, dan Trigger dalam basis data
- Dapat mengimplementasikan Stored Procedure dalam basis data
- Dapat mengimplementasikan Function dalam basis data
- Dapat mengimplementasikan Trigger dalam basis data
Pembahasan
A. Membuat Basis Data Baru Beserta Isinya Membuat sebuah basis data dengan nama universitas dan berisi satu tabel mahasiswa dengan nilai seperti pada gambar berikut.

Berikut ini merupakan perintah untuk membuat database baru.
MariaDB [(none)]> CREATE DATABASE Universitas_Tidar;
Query OK, 1 row affected (0.002 sec)
MariaDB [(none)]> USE Universitas_Tidar;
Database changed
Selanjutnya melakukan perintah untuk membuat tabel dalam database pada kode berikut ini.
MariaDB [Universitas_Tidar]> CREATE TABLE mahasiswa (
-> NPM CHAR(5) PRIMARY KEY NOT NULL,
-> nama VARCHAR(50) NOT NULL,
-> alamat TEXT NOT NULL,
-> id_kelurahan INT(5),
-> jenis_kelamin ENUM('L', 'P'),
-> no_hp CHAR(15) NOT NULL,
-> kode_prodi INT
-> );
Query OK, 0 rows affected (0.050 sec)
Setelah tabel berhasil dibuat, dilakukan pengisian data pada tabel dengan perintah berikut ini.
MariaDB [Universitas_Tidar]> INSERT INTO mahasiswa 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)
-> );
B. Implementasi Stored Procedure Membuat sebuah stored procedure untuk melihat data mahasiswa secara sederhana yang hanya menampilkan kolom NPM, nama, dan no_hp. Hal tersebut dapat dilakukan dengan menggunakan perintah pada kode berikut ini .

Kemudian fungsi tersebut dapat dieksekusi dengan menggunakan perintah berikut :

Setelah dieksekusi, layar monitor akan menampilkan data sebagai berikut:

C. Implementasi Function Fungsi hampir sama dengan prosedur, tetapi fungsi akan mengembalikan nilai sedangkan prosedur tidak. Konsep fungsi tersebut dapat diimplementasikan dengan menggunakan perintah pada kode berikut:

Saat fungsi berhasil ditambahkan, pada layar monitor akan menampilkan hasil sebagai berikut:

Kemudian pemanggilan fungsi tersebut dapat dilakukan dengan menggunakan perintah SELECT pada kode berikut:

Setelah itu akan menampilkan hasil sebagai berikut:

D. Implementasi Trigger Dalam praktikum trigger kita akan menggunakan dua buah tabel bernama barang dan pembelian dengan data sebagai seperti berikut:

Tabel Barang

Tabel Pembelian
Operasi-operasi berkenaan dengan pendefinisian trigger tidak berbeda dengan objek-objek database lainnya.
- Masuk ke dalam database yang digunakan untuk menciptakan tabel tersebut, kemudian masuk ke menu Trigger.

- Kemudian pilih Create new Trigger untuk menambahkan atau membuat trigger.

- Selanjutnya, layar akan menampilkan laman berikut dan dapat diisi nama trigger beserta keterkaitan data lainnya sebagai berikut.

Keterangan: — Trigger nama → nama dari trigger yang dibuat — Table → tabel yang digunakan dalam trigger — Go → opsi akhir untuk menyimpan trigger
Saat trigger berhasil ditambahkan, pada layar monitor akan menampilkan hasil sebagai berikut:

- Setelah berhasil membuat trigger, kembali ke SQL database dan masukkan perintah berikut ini untuk menambahkan data baru pada tabel barang.

- Saat perintah tersebut berhasil, maka akan menampilkan data yang menunjukkan adanya data baru dengan id ‘A13’ dalam tabel barang seperti pada gambar berikut :

- Seperti objek database lainnya, penghapusan trigger dapat dilakukan dengan menggunakan perintah DROP dengan ketentuan DROP TRIGGER nama_trigger atau langsung ke menu trigger dan menghapusnya dengan cara klik opsi drop pada trigger yang ingin dihapus dan dikonfirmasi dengan memilih opsi OK pada gambar berikut.

Saat trigger berhasil dihapus, pada layar monitor akan menampilkan hasil sebagai berikut:

- Keyword OLD dan NEW → Untuk merujuk ke kolom-kolom tabel yang diasosiasikan dengan trigger. Keyword OLD mengacu pada nilai lama, sedangkan NEW merepresentasikan nilai baru. Dalam trigger INSERT, keyword yang dapat digunakan hanya NEW karena tidak ada data lama yang dapat diimplementasikan seperti pada gambar berikut.

Saat trigger berhasil ditambahkan, pada layar monitor akan menampilkan hasil sebagai berikut:

Selanjutnya, trigger tersebut dapat diuji dengan cara menampilkan data awal sebelum penyisipan data atau nilai baru pada tabel tertentu dengan menggunakan perintah SELECT pada gambar berikut.

Setelah itu, memasukkan data baru pada tabel pembelian dengan perintah berikut:

Kemudian, untuk mengetahui hasilnya dilakukan pengecekan kembali pada data tabel yang telah ditampilkan sebelumnya. Berikut ini merupakan hasil setelah penyisipan data baru yang menunjukkan adanya perubahan pada jumlah stok barang yang memiliki id ‘A11’.

- Pada trigger, perubahan dapat dilakukan dengan memilih opsi edit pada gambar berikut.

- Kemudian akan menampilkan pop up berikut pada layar monitor. Pada trigger ini dilakukan implementasi perubahan trigger dari UPDATE ke DELETE yang hanya bisa menggunakan keyword OLD.

Setelah trigger berhasil dimodifikasi, akan menampilkan hasil berikut ada layar monitor.

Setelah itu, trigger DELETE tersebut dapat diuji dengan cara menampilkan data awal sebelum penghapusan pada tabel tertentu dengan menggunakan perintah SELECT pada gambar berikut.

Setelah itu, hapus data pada tabel barang dengan perintah berikut:

Kemudian, untuk mengetahui hasilnya dilakukan pengecekan kembali pada data tabel yang telah ditampilkan sebelumnya. Berikut ini merupakan hasil setelah penghapusan data yang menunjukkan adanya perubahan pada data yang terdapat dalam tabel pembelian berupa hilangnya salah satu data yang memiliki ‘id_brg’ yang sama dengan data barang yang dihapus.

- Implementasi operasi UPDATE trigger dapat dilakukan dengan menggunakan kedua keyword, yaitu NEW mapun OLD secara bersamaan seperti pada gambar berikut.

Saat trigger berhasil ditambahkan, pada layar monitor akan menampilkan hasil sebagai berikut:

Setelah itu, lakukan pengujian dengan menggunakan perintah berikut ini.

Saat UPDATE berhasil dilakukan, pada layar monitor akan menampilkan hasil sebagai berikut:

Kemudian, untuk mengetahui hasilnya dilakukan pengecekan dengan menampilkan tabel barang sebagai berikut.

- Trigger kompleks Keberadaan trigger secara nyata mampu mengatasi berbagai persoalan sulit, misalnya berkaitan dengan integritas atau audit data. Ini tentu sangat masuk akal, karena trigger juga bisa mengandung pernyataan-pernyataan yang kompleks termasuk pencabangan, pengulangan, fungsi-fungsi agregat, bahkan kode pemanggilan prosedur. Sebagai ilustrasi sederhana, dilakukan pendefinisian trigger untuk memeriksa operasi penambahan data barang dengan ketentuan jika data sudah ada, berikan status eksistensi barang dan jika sebaliknya, data bisa langsung dimasukkan dengan menggunakan perintah berikut.

Saat trigger berhasil ditambahkan, pada layar monitor akan menampilkan hasil sebagai berikut:

Soal Tugas Modul Procedure, Fungsi, dan Triger
- Sebuah toko buku online ingin mengelola data penjualan, stok buku, dan bonus untuk pelanggan yang aktif berbelanja. Anda diminta membantu membuat sistem basis data yang mencakup fungsi, prosedur, dan trigger untuk mempermudah pengelolaan data.
- Struktur Tabel
- Buku
CREATE TABLE buku (
id_buku INT AUTO_INCREMENT PRIMARY KEY,
judul VARCHAR(100),
penulis VARCHAR(100),
harga DECIMAL(10,2),
stok INT );
- Pelanggan
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' );
- Transaksi
CREATE TABLE transaksi (
id_transaksi INT AUTO_INCREMENT PRIMARY KEY,
id_pelanggan INT,
id_buku INT, jumlah INT,
total_harga DECIMAL(10,2),
FOREIGN KEY (id_pelanggan) REFERENCES pelanggan(id_pelanggan),
FOREIGN KEY (id_buku) REFERENCES buku(id_buku)
);
-
FUNCTION: Hitung Diskon Pelanggan Buat fungsi hitung_diskon(total_belanja DECIMAL) yang mengembalikan nilai diskon berdasarkan total belanja pelanggan: • < 1.000.000 → 0% • -5.000.000 → 5% • 5.000.000 → 10% Gunakan tipe kembalian DECIMAL(5,2)
-
STORED PROCEDURE: Tambah Transaksi Buat prosedur tambah_transaksi(p_id_pelanggan INT, p_id_buku INT, p_jumlah INT) yang:
- Menghitung total_harga = harga_buku * jumlah
- Mengurangi stok buku sesuai jumlah
- Menambahkan data ke tabel transaksi dengan tanggal hari ini
- Menambahkan nilai total_harga ke total_belanja pelanggan
- Menampilkan pesan ‘Transaksi berhasil’
Bonus: Tambahkan logika validasi jika stok tidak mencukupi, tampilkan pesan error.
- TRIGGER: Update Status Member Otomatis Buat trigger AFTER UPDATE pada tabel pelanggan yang: — Mengubah status member secara otomatis: — total_belanja >= 5.000.000 → PLATINUM — total_belanja >= 1.000.000 → GOLD — selainnya → REGULER
Penyelesaian
1.Membuat Database Toko Buku
MariaDB [(none)]> CREATE DATABASE db_tokobuku;
Query OK, 1 row affected (0.005 sec)
MariaDB [(none)]> USE db_tokobuku;
Database changed
2. Membuat Tabel dalam Database Toko Buku
MariaDB [db_tokobuku]> CREATE TABLE buku (
-> id_buku INT AUTO_INCREMENT PRIMARY KEY,
-> judul VARCHAR(100),
-> penulis VARCHAR(100),
-> harga DECIMAL(10,2),
-> stok INT
-> );
Query OK, 0 rows affected (0.042 sec)
MariaDB [db_tokobuku]> 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'
-> );
Query OK, 0 rows affected (0.052 sec)
MariaDB [db_tokobuku]> 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)
-> );
Query OK, 0 rows affected (0.108 sec)
3. Membuat Fungsi Hitung Diskon Pelanggan dalam SQL
DELIMITER $$
CREATE FUNCTION hitung_diskon(total_belanja DECIMAL(10,2)) RETURNS DECIMAL(5,2)
DETERMINISTIC
BEGIN
DECLARE diskon DECIMAL(5,2);
IF total_belanja >= 5000000 THEN
SET diskon = 0.10;
ELSEIF total_belanja >= 1000000 THEN
SET diskon = 0.05;
ELSE
SET diskon = 0.00;
END IF;
RETURN diskon;
END $$
DELIMITER ;
Saat fungsi berhasil ditambahkan, pada layar monitor akan menampilkan hasil sebagai berikut:

4. Membuat Stored Procedure Tambah Transaksi dalam SQL
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_total DECIMAL(10,2);
DECLARE v_stok INT;
-- Ambil harga dan stok buku
SELECT harga, stok INTO v_harga, v_stok FROM buku WHERE id_buku = p_id_buku;
-- Cek stok cukup
IF v_stok < p_jumlah THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Stok buku tidak mencukupi';
ELSE
SET v_total = v_harga * p_jumlah;
-- Kurangi stok buku
UPDATE buku SET stok = stok - p_jumlah WHERE id_buku = p_id_buku;
-- Tambahkan data ke tabel transaksi
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 total belanja pelanggan
UPDATE pelanggan SET total_belanja = total_belanja + v_total
WHERE id_pelanggan = p_id_pelanggan;
-- Tampilkan pesan
SELECT 'Transaksi berhasil' AS pesan;
END IF;
END $$
DELIMITER ;
Saat prosedure berhasil ditambahkan, pada layar monitor akan menampilkan hasil sebagai berikut:

5. Membuat Trigger Update Status Member Otomatis dalam phpMyAdmin

Saat trigger berhasil ditambahkan, pada layar monitor akan menampilkan hasil sebagai berikut:

Kesimpulan
Berdasarkan uraian materi tersebut dapat dipahami bahwa Stored procedure, function, dan trigger merupakan fitur utama MySQL untuk menjalankan logika dan otomatisasi di sisi database. Stored procedure digunakan untuk proses SQL yang dapat dijalankan berulang secara efisien, function digunakan untuk menghasilkan satu nilai yang dapat dipakai dalam query, sedangkan trigger berjalan otomatis saat terjadi INSERT, UPDATE, atau DELETE. Ketiganya membantu meningkatkan efisiensi, keamanan, dan integritas data, dengan pemilihan fitur disesuaikan pada kebutuhan proses, nilai keluaran, atau aksi otomatis.
Github
Referensi
Nugroho, A. Modul — Prosedur, Fungsi dan Trigger. Universitas Tidar. Abiyyu, Ilyasa W. (2025, 07 Juni). Basis Data-Prosedur, Fungsi dan Trigger. Diakses pada [30 Mei 2026], dari https://medium.com/@abiyyuilyasa60/basis-data-prosedur-fungsi-dan-trigger-f804b7dd4beb CodeLucky. (2025, 22 Maret). SQL Triggers Tutorial: Automate Database Actions for Beginners. Diakses pada [01 Juni 2026], dari https://youtu.be/0eE03q83LHM?si=sBDwnO1PtPGFlG7n
메타데이터
- post_id
- 1ae01544ebc8
- slug
- basis-data-prosedur-fungsi-dan-trigger-1ae01544ebc8
- url
- https://medium.com/@qilanafisa/basis-data-prosedur-fungsi-dan-trigger-1ae01544ebc8
- canonical_url
- https://medium.com/@qilanafisa/basis-data-prosedur-fungsi-dan-trigger-1ae01544ebc8
- author_url
- https://medium.com/@qilanafisa
- status
- ok
- fetched_at
- 2026-08-04 18:02:17