Senin, 27 Juni 2011

View, Store Procedure dan Trigger dalam MySQL

MySQL adalah sebuah perangkat lunak sistem manajemen basis data SQL (bahasa Inggris: database management system) atau DBMS yang multithread, multi-user, dengan sekitar 6 juta instalasi di seluruh dunia. MySQL AB membuat MySQL tersedia sebagai perangkat lunak gratis dibawah lisensi GNU General Public License (GPL), tetapi mereka juga menjual dibawah lisensi komersial untuk kasus-kasus dimana penggunaannya tidak cocok dengan penggunaan GPL.

Fitur - fitur yang terdapat di dalam MySQL :

1. View
2. Store Procedure
3. Trigger

View

Salah satu feature yang terdapat pada MySQL adalah view. View adalah tabel temporari kadang ada juga yang bilang virtual tabel. Biasanya view di buat untuk menyederhanakan pengambilan data misalkan di tabel tersebut terdapat join, group by, aggregate (sum, min, max, dsb).

Pertama - tama kita membuat tabel di bawah ini :

1. tbl_siswa (tabel untuk menyimpan biodata siswa)

CREATE TABLE `sisfo_sekolah`.`tbl_mp` (
`mp` char(10) NOT NULL,
`nama` varchar(255) NOT NULL,
PRIMARY KEY (`mp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

2. tbl_mp (tabel untuk menyimpan mata pelajaran)

CREATE TABLE `sisfo_sekolah`.`tbl_mp` (
`mp` char(10) NOT NULL,
`nama` varchar(255) NOT NULL,
PRIMARY KEY (`mp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

3. tbl_nilai (tabel untuk menyimpan nilai2 siswa)

CREATE TABLE `sisfo_sekolah`.`tbl_nilai` (
`kode` varchar(255) NOT NULL,
`nis` char(10) NOT NULL,
`mp` char(10) NOT NULL,
`nilai` int(11) NOT NULL,
PRIMARY KEY (`kode`),
KEY `nis_fk_constraint` (`nis`),
KEY `mp_fk_constraint` (`mp`),
CONSTRAINT `mp_fk_constraint` FOREIGN KEY (`mp`) REFERENCES `tbl_mp` (`mp`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `nis_fk_constraint` FOREIGN KEY (`nis`) REFERENCES `tbl_siswa` (`nis`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Jadi ketiga tabel di atas tadi untuk intinya adalah tabel-tabel yang yang, dibutuhkan untuk menghasilkan nilai-nilai siswa dari setiap mata pelajaran.

Sekarang kita ingin membuat sebuah report yang dimana di report tersebut memilik field nis, nama_siswa, nama_matapelajaran, nilai, yang dimana akan dimplementasikan query tersebut menjadi sebuah view, dibawah ini adalah cara membuat nya,

CREATE VIEW `view_nilai`
AS select `n`.`nis` AS `nis`,
`n`.`nilai` AS `nilai`,
`s`.`nama` AS `nama_siswa`,
`m`.`nama` AS `mata_pelajaran`
from ((`tbl_nilai` `n` join `tbl_siswa` `s` on((`n`.`nis` = `s`.`nis`))) join `tbl_mp` `m` on((`n`.`mp` = `m`.`mp`)))

Setelah view terbuat dengan query yang cukup kompleks seperti diatas, maka untuk untuk mendapat nilai siswa berikutnya kita cukup memanggil view nya saja seperti di bawah ini,

select * from view_nilai


Store Procedure

Store Procedure adalah salah satu feature yang terdapat di MySQL. Store Procedure adalah kumpulan-kumpulan SQL berupa rountine yang di simpan dalam database MySQL Server.

Manfaat Store Procedure adalah:
  1. Akan memperkecil trafik request dari aplikasi ke database karena semua proses bisnis dilakukan di database mysql dan aplikasi akan menerima hasil proses saja.
  2. ketika sebuah aplikasi yang didevelop terdiri dari berbagai bahasa pemrograman (misalkan desktop dan web) yang mana kedua tipe aplikasi tersebut membutuhkan hasil dan operasi database yang sama.
  3. untuk meningkatkan securiti, misalkan sebuah aplikasi yang login dengan user abcd tidak dapat mengakses tabel2 tertentu secara langsung tetapi mesti melalui store procedure, dengan cara ini akan meningkatkan ke validasian data.
Dalam contoh dibawah ini kasus tentang sistem informasi sekolah, yang mana Store Procedure yang dibuat akan menangani tentang menghasilkan data siswa yang difilter bedasarkan kelas.

sturuktur tabel siswa

CREATE TABLE `data_siswa`.`tbl_siswa` (
`nis` char(10) NOT NULL,
`nama` varchar(255) NOT NULL,
`kelas` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Store procedure untuk menampilkan data siswa dalam bentuk result set

DELIMITER $$

CREATE PROCEDURE sp_tampil_siswa_kelas(p_kelas int)
BEGIN
SELECT * FROM tbl_siswa where KELAS = p_kelas;
END$$

DELIMITER ;

Penjelasannya sebagai berikut:
  • DELIMITER = adalah untuk memberi tahu kepada myql soal delimiter yang digunakan, secara default menggunakan ; jadi bila ada tanda ; mysql akan mengartikan akhir dari statement, pada contoh di atas delimeter yang digunakan $$ jadi akhir statementnya adalah $$
  • CREATE PROCEDURE = adalah header untuk membuat store procedure
  • BEGIN END = adalah body dari store procedure, jadi semua SQL nya di tulis disini.
Contoh pemanggilannya seperiti dibawah ini:

call sp_tampil_siswa_kelas(2);


Trigger

Trigger adalah suatu prosedur yang otomatis akan dijalankan apabila “pemicu”dari trigger itu dipanggil. Sebagai contoh : penghapusan satu tabel akan memicu suatu trigger untuk menghapus pada tabel yang lain yang telah ditunjuk terlebih dahulu. dibawah ini saya berikan satu contoh penggunaan trigger pada database MySQL.

Sebagai contoh kita siapkan terlebih dahulu sebuah database dan tabel yang akan diuji coba seperti dibawah ini :

create database mytrigger; 
create table coba (kode varchar(5) not null, 
nama varchar(35) not null,primary key (kode)) 
create table coba2 (kode varchar(5) not null, 
nama varchar(35) not null,primary key (kode)) 
create table tran (kode varchar(5) not null,
kodetran varchar(5),jumlah double, 
primary key nkode (kode,kodetran))

Kemudian buatlah sebuah trigger dengan kode seperti dibawah ini :

delimiter $$ create trigger auto_insert_coba2before
insert on coba for each rowbegin 
insert into coba2 (kode,nama) 
values (NEW.kode,NEW.nama);end$$
create trigger auto_update_coba2before
update on coba for each rowbegin update coba2
set nama=NEW.nama
where kode=NEW.kode;end$$  
create trigger auto_delete_coba2before
delete on coba for each rowbegindelete from coba2
where kode=OLD.kode; 
delete from tran where kode=OLD.kode;end$$
 
Oke deh... Semoga membantu n selamat mencoba juga... :D

Tidak ada komentar:

Posting Komentar