September 28, 2023

Log Of Oyazhuryachna

Blog berbagi resource programming

Membuat Trigger di MySQL (Bagian #1)

Trigger digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis sebelum atau sesudah terjadi proses INSERT, UPDATE atau DELETE dari suatu tabel. Sebagai contoh misalnya kita ingin menyimpan id pelanggan secara otomatis ke tabel ‘log’ sebelum menghapus data di tabel pelanggan. Triggers mulai dikenal di versi MySQL 5.0, dan di versi saat ini (5.0.4) fungsionalitasnya sudah bertambah.

Secara sederhana fungsi daripada trigger adalah sebagai berikut :

  • Melakukan update data otomatis jika terjadi perubahan. Contohnya adalah dalam sistem penjualan, jika dientri barang baru maka stock akan bertambah secara otomatis.
  • Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi perubahan, secara otomatis akan menyimpan ke tabel log.
  • Trigger dapat digunakan untuk melakukan validasi dan verifikasi data sebelum data tersebut disimpan.

Membuat Trigger Baru
Berikut ini bentuk umum perintah untuk membuat triggers:

CREATE TRIGGER name
[BEFORE|AFTER] [INSERT|UPDATE|DELETE]
ON tablename
FOR EACH ROW statement

Dimana:

BEFORE | AFTER digunakan untuk menentukan kapan proses secara otomatis akan dieksekusi, sebelum atau sesudah proses.
INSERT | UPDATE | DELETE digunakan untuk menentukan event yang dijadikan trigger untuk menjalankan perintah-perintah di dalam triggers. Statement atau perintah dalam trigger dapat berupa satu perintah saja, dan dapat juga beberapa perintah sekaligus. Jika terdapat beberapa perintah dalam trigger, maka gunakan perintah BEGIN dan END untuk mengawali dan mengakhiri perintah. Di dalam statement trigger, kita dapat mengakses record tabel sebelum atau sesudah proses dengan menggunakan NEW dan OLD. NEW digunakan untuk mengambil record yang akan diproses (insert atau update), sedangkan OLD digunakan untuk mengakses record yang sudah diproses (update atau delete).

Berikut ini contoh trigger yang akan mngisi field jml_anak pada tabel tblpegawai ketika dilakukan pengisian data anak pada tabel tblanak, adapun langkah-langkahnya adalah :

1. Jalankan Mysql Client disarankan gunakan command line interface atau berbasis GUI jangan menggunakan phpmyadmin karena akan berbeda langkahnya ketika membuat trigger

2. Buat database pegawai

mysql> create database pegawai;
Query OK, 1 row affected (0.00 sec)

3. Buat Tabel tblpegawai

mysql> create table tblpegawai (
no_induk char(4) not primary key,
nama varchar(30),
jenis_kelamin char(1),
jml_anak smallint);
Query OK, 0 rows affected (0.13 sec)

4. Masukan Data ke table tblpegawai
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('001','Oya Suryana','L');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('002','Dadang Suhendar','L');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('003','Emah','P');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('004','Ecih Sukaesih','P');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('005','Yudi Suherman','L');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('006','Uman Suherman','L');
mysql> insert into tblpegawai (no_induk,nama,jenis_kelamin)values ('007','Alis Suhelawati','P');

5. Tampilkan Tabel Pegawai


6. Buat Tabel Anak
mysql> create table tblanak (
id_anak int auto_increment primary key,
no_induk char(3),
nama_anak varchar(30)
);
Query OK, 0 rows affected (0.12 sec)

7. Membuat Trigger dengan nama jml_anak dimana akan dijalankan setelah (after) penginputan data (insert) pada tabel tblanak

mysql> Delimiter //
mysql> Create Trigger jml_anak after insert on tblanak
-> for each row begin update tblpegawai
-> set jml_anak=(select count(*)from tblanak where no_induk=new.no_induk)
-> where no_induk=new.no_induk;
-> end;
-> //
mysql> Delimiter ;
Query OK, 0 rows affected (0.25 sec)

8. Mengisi data anak ke tblanak

mysql> insert into tblanak (no_induk,nama_anak) values ('001','Farhan');
mysql> insert into tblanak (no_induk,nama_anak) values ('001','Abiq');
mysql> insert into tblanak (no_induk,nama_anak) values ('002','Davinsa');

9. Tampilkan data Anak

10. Saatnya mengecek apak triger berfungsi atau tidak, tampilkan data pegawai di tblpegawai

Perhatikan data karyawan dengan no_induk 001 dan 002 pada field jml_anak secara otomatis akan terisi dengan jml anak yang diinput pada tblanak.