This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

Wednesday, January 2, 2013

Trigger pada MySQL



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

 
mysql> select * from prodi;










      Menampilkan data dari tabel  mahasiswa”

 
mysql> select * from 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.


 
mysql> describe log_mhs;







      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

 
-> for each row insert into log_mhs values('Ubah data',now()); mysql> update mahasiswa set nama='Moh. Riyan' where nim='00543'; mysql> select * from mahasiswa;








 
mysql> select * from log_mhs;



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';




 
mysql> select * from log_mhs;




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:

 
mysql> show triggers;







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.