Implementasi Trigger pada MySQL
Pendahuluan
Basis
Data atau Database adalah kumpulan
data yang saling berhubungan yang disimpan secara bersama sedemikian rupa tanpa
pengulangan (redundancy) yang tidak perlu, untuk memenuhi kebutuhan.
Dengan
database, data
atau
informasi
dapat
disimpan secara permanen.
Informasi yang tadinya di dalam variabel, akan segera hilang bersamaan dengan
selesainya eksekusi program aplikasi. Untuk itu diperlukan database
untuk menyimpan
informasi yang ingin
dipertahankan
saat eksekusi selesai.
Salah satu sistem database (DBMS) populer saat ini adalah MySQL. Terdapat
beberapa alasan mengapa MySQL dipilih
sebagai DBMS, diantaranya: freeware,
didukung hampir semua bahasa pemrograman
populer saat
ini,
database
tercepat
(metode one-sweep
multijoin), dan komunitas yang besar.
Setiap database mempunyai
fasilitas yang
memungkinkan
aplikasi-aplikasi
untuk
menyimpan
dan
memanipulasi data. Selain
itu,
database juga memberikan
fasilitas lain yang lebih spesifik yang dipakai untuk menjamin konsistensi hubungan
antar tabel dan
integritas data di dalam database. Referential integrity merupakan sebuah mekanisme untuk
mencegah
putusnya
hubungan master/detail. Jika user
mencoba menghapus sebuah field pada tabel master sehingga record di tabel detail
menjadi yatim
(tidak mempunyai induk),
referential
integrity akan mencegahnya.
Trigger
merupakan program
yang dihubungkan dengan suatu tabel atau view yang secara otomatis melakukan suatu aksi
ketika suatu baris di dalam tabel atau view dikenai operasi seperti INSERT, UPDATE atau
DELETE.
Trigger dapat dimanfaatkan untuk menjaga, mengelola, dan membantu kinerja database engineer dalam upaya terjaminnya integritas
sebuah
database. Dalam
implementasinya untuk pekerjaan
sehari-hari,
pembuatan
trigger dan
tabel log, digunakan untuk mencatat kejadian suatu tabel yang
dianggap rawan serangan
cracker. Dengan struktur trigger yang
baik sesuai kebutuhan, administrator dapat melakukan pelacakan dan recovery
data dengan cepat karena
mengetahui record mana
saja yang
“diserang”. Atau,
dihubungkan dengan program aplikasi (user interface)
agar mengaktifkan alarm, jika terdapat operasi database pada waktu yang
tidak seharusnya (misalkan
malam
hari).
Persiapan Data
Untuk menerapkan
Trigger dibutuhkan suatu relasi, untuk itu kita perlu membuat suatu
database yang mempunyai tabel dan relasi misalkan: mahasiswa dan prodi, sebagaimana yang diilustrasikan dengan perintah SQL
di bawah ini.
Membuat database “akademik”
mysql> create database
akademik;
Menggunakan
database
mysql> use akademik;
Membuat tabel “mahasiswa”
mysql> create
table
mahasiswa(nim
char(5),
nama
varchar(25),
alamat
varchar(50), kode_prodi char(3), primary key(nim));
Membuat tabel “prodi”
mysql> create
table
prodi(kode_prodi
char(3),
nama_prodi
varchar(25),
jurusan varchar(20), primary key(kode_prodi));
Membuat relasi antara tabel “mahasiswa” dengan
“prodi”
mysql> alter
table
mahasiswa
add
foreign
key(kode_prodi)
references
prodi(kode_prodi);
Menginputkan 5 data ke tabel “prodi”
mysql> insert into prodi values('P01','Eks Ilmu Komputer','Matematika'), ('P02','Ilmu
Komputer','Matematika'), ('P03','D3 Komsi','Matematika'), ('P04','D3 Rekmed','Matematika'),
('P05','D3 Ellins','Fisika');
Menginputkan 3 data ke tabel “mahasiswa”
mysql> insert into mahasiswa values('00543','Muhammad','Karangmalang A-50',
'P01'),('10043','Ahmad
Sholihun','Karangmalang D-17',’P02'), ('10041','Sugiharti','Karangmalang
A-23','P02');
Menampilkan data dari tabel “prodi”
|
Menampilkan data dari tabel “mahasiswa”
|
1. TRIGGER
Pernyataan CREATE TRIGGER digunakan untuk membuat trigger,
termasuk
aksi apa yang
dilakukan saat
trigger diaktifkan.
Trigger
berisi program
yang dihubungkan dengan suatu tabel atau view yang secara otomatis melakukan suatu aksi
ketika suatu baris di dalam tabel atau view dikenai operasi INSERT, UPDATE atau
DELETE.
Sintak :
CREATE
[DEFINER = { user
| CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
Keterangan :
[DEFINER = { user | CURRENT_USER }]: Definisi user yang sedang aktif,
sifatnya opsional.
trigger_name: Nama trigger.
trigger_time: waktu
menjalankan trigger. Ini dapat berupa BEFORE atau
AFTER.
BEFORE: Membuat trigger
diaktifkan sebelum
dihubungkan dengan
suatu
operasi.
AFTER:
Membuat
trigger
diaktifkan
setelah dihubungkan
dengan suatu
operasi.
trigger_event: berupa kejadian yang akan
dijalankan trigger.
trigger_event dapat berupa salah satu dari berikut:
INSERT : trigger diaktifkan ketika sebuah record baru disisipkan ke dalam
tabel. Contoh: statemen INSERT,
LOAD DATA, dan REPLACE.
UPDATE
:
trigger
diaktifkan
ketika sebuah
record
dimodifikasi.
Contoh:
statemen UPDATE.
DELETE : trigger diaktifkan ketika sebuah record dihapus. Contoh: statemen
DELETE dan REPLACE.
Catatan : trigger_event tidak merepresentasikan statemen SQL yang diaktifkan trigger sebagai
suatu operasi tabel. Sebagai contoh, trigger BEFORE untuk INSERT akan diaktifkan tidak hanya oleh statemen INSERT tetapi juga statemen LOAD DATA.
tbl_name: Nama tabel yang berasosiasi dengan
trigger.
trigger_stmt: Statemen (tunggal atau jamak) yang akan dijalankan ketika trigger
aktif.
Contoh yang akan
dibahas adalah
mencatat
kejadian-kejadian
yang terjadi beserta waktunya
pada
tabel mahasiswa, dan catatan-catatan tadi disimpan dalam tabel
yang lain,
misal log_mhs. Misalkan struktur tabel log_mhs
adalah sebagai
berikut.
|
Contoh 1:
mysql> create trigger
ins_mhs after insert on mahasiswa
->
for each row insert into log_mhs values('Tambah data',now()); mysql> insert
into mahasiswa values('00631','Hanif','Kalasan','P01'); mysql> select * from
log_mhs;
Dari contoh diatas dapat dilihat bahwa
ketika satu record pada tabel mahasiswa disisipkan (insert), maka secara
otomatis tabel log_mhs akan disisipkan satu record, yaitu kejadian
‘Tambah data’ dan waktu
saat record
pada
tabel
mahasiswa disisipkan.
Contoh 2 :
mysql> create trigger
updt_mhs after update on mahasiswa
|
|
Dari contoh diatas dapat dilihat bahwa ketika
satu record pada
tabel mahasiswa
diperbaharui (update), maka secara
otomatis tabel log_mhs akan disisipkan satu record, yaitu kejadian
‘Ubah data’ dan waktu
saat record
pada
tabel
mahasiswa diperbaharui.
Contoh 3 :
mysql> create trigger
del_mhs after delete on mahasiswa
-> for each row insert
into log_mhs values('Hapus data',now());
mysql> delete from
mahasiswa where nim='00631';
|
Dari contoh diatas dapat dilihat bahwa ketika
satu record pada
tabel mahasiswa
dihapus (delete), maka secara otomatis tabel log_mhs akan disisipkan satu record, yaitu kejadian
‘Hapus
data’
dan
waktu saat record pada tabel mahasiswa
dihapus.
Menampilkan
daftar trigger yang telah dibuat:
|
Keterangan (record
pada kolom “statement” dan
“sql_mode”): S1 : insert into log_mhs values('Tambah
data',now()) S2 : insert into log_mhs values('Ubah data',now())
S3 : insert into log_mhs
values('Hapus data',now())
SQL1
: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SQL2 :
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SQL3 :
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Karena hasil eksekusi perintah “show triggers” sangat panjang, tampilan di atas sengaja diedit dengan tujuan agar mudah dipahami.
Kesimpulan
Berdasarkan materi yang disajikan dapat ditarik
kesimpulan sebagai berikut:
Trigger merupakan kumpulan perintah SQL yang secara otomatis dijalankan untuk merespon sebuah perintah tertentu.
0 komentar:
Post a Comment