16 April 2013

Data Tetap Konsisten dengan SQL Trigger

ads

Membuat data Tetap konsisten dengan SQL Trigger Sangatlah membantu kita dalam manajemen field database,karana Setiap terjadi aksi transaksi Input,Update,maupun delete pada suatu table, maka table yang lain akan berpengaruh berubah juga. gamabaranya seperti ini kita memiliki table barang dan jual diamna jika kita merubah record barang yang ada di table barang maka table jual akan ikut berubah juga .untuk lebih jelasnya silahkan dibaca pada Tulisan ini dibawah ini.
Sebelumya melakukan pengolahan data kita harus dapat merencanakan suatu data yang dimanipulasi agar selalu konsisten, Nah...! sebelum masuk kedalam topik bahasan pada tutorial kali ini kita akan mengenal konsep dasar Trigger dimulai dari pengenalan trigger, pembuatan triger , menampilkan trigger dan menghapus trigger. Sebagai penyerataan dalam praktek tutorial ini saya mengunakan aplikasi database server (MYSQL 5 server) dan boleh mengunakan yang lain ...

Pengenalan Trigger


Apa yang dimaksud dengan trigger tersebut ...? Trigger adalah kumpulan Code/script pernyataan SQL(Structur Query Language) yang akan dieksekusi berdasarkan waktu(time_trigger) dan kejadian(event_trigger) dengan tujuan untuk menjaga konsistensi sesuai dengan pernyataan integritas file yang dituju yang berjalan pada database server (mysql,...,dll). Untuk pemahaman dari pengertian trigger ini dapat dilihat dari cara pembuatan trigger yang dijelaskan dibawah ini .

Pembuatan Trigger

Trigger Diciptakan Dengan Pernyataan CREATE TRIGGER, Seperti :

CREATE TIGGER name_triggerTime_trigger event_trigger ON name_tableFOR EACH ROWBEGINPernyataan ; END ;

Keterangan


Name_trigger adalah nama trigger yang akan tercipta dan terkait dengan database yang digunakan saja..!
Time_trigger menyatakan waktu trigger akan dipangil secara otomatis . time_trigger tersebut berupa statement BEFORE yang berarti sebelum atau AFTER yang berarti sesudah
Event_Trigger adalah kejadian yang membuat trigger di panggi secara otomatis.Untuk keterangan Event_trigger dapat dilihat pada table brikut:
Event Keterangan
INSERT Trigger akan dijalan kan ketika terdapat operasi penambahan sebuah baris data ke table bersangkutan
UPDATE Trigger dijalankan ketika terdapat operasi pengubahan sebuah baris dalam table bersangkutan
DELETE Trigger dijalankan ketika terdapat operasi penghapusan baris pada table bersangkutan

ALIAS PADA TRIGGER


Alias_trigger trigger memiliki alias dengan nama NEW dan OLD
Berikut penjelasan dan pengunaan.
Pengunaan Alias trigger

NEW.nama_kolom
OLD.nama_kolom


Penjelasan :

NEW.nama_kolom menyatakan nilai nama_kolom sebelum dihapus(delete) atau diubah(update)
OLD.nama_kolom menyatakan nilai nama_kolom setelah diubah(update) atau setelah data baru dimasukkan(insert).
<!-- Lanjut-->

Melihat Daftar Trigger


Untuk melihat daftar triggers yang dibuat dapat mengunakan perintah berikut ini :

  SHOW triggers ;


Menghapus Trigger


Untuk Menghapus Trigger daftar triggers yang dibuat dapat mengunakan perintah berikut ini :

DROP TRIGGER [nama_database.]nama_trigger ;

 

Praktekan


Selanjutnya dalam prakteknya kita membutuhkan satu database dan beberapa table pada contoh ini table yang digunakan yaitu barang dan jual, dapat dilihat dari relation table pada gambar ERD dibawah ini : 
Sedikit keterangan untuk gambar diatas menjelaskan satu kode jenis barang memiliki banyak penjualan contoh layaknya sebuah mini market yang tiap harinya melakukan transaksi penjualan barang dimana barang dijual berdasarkan jenis dan nama barang tersebut. Umpamakan sia A membeli sebuah odol yang bernama pepsoden dan si B membeli Odol bernama Close-up,maka akan terjadi suatu transaksi penjualan dua Odol yang berbeda namanya.dan dapat disimpulkan satu jenis barang dapat menjual banyak nama atau disebut juga (one-to-many) .

Berikut Sousescript SQL dari table barang dan jual


CREATE TABLE  `barang` (
`kd_barang` int(10) NOT NULL,
`jenis_barang` varchar(35)  NOT NULL,
`nama_barang` varchar(50)  NOT NULL,
`stock` int(15) NOT NULL,
PRIMARY KEY (`kd_barang`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `barang` 
(`kd_barang`, `jenis_barang`, `nama_barang`, `stock`) 
VALUES
(111, 'Odol', 'Close-up', 12),
(112, 'Mie', 'Supermi', 18),
(113, 'Odol', 'Pepsoden', 12);

CREATE TABLE  `jual` (
`kd_jual` int(12) NOT NULL auto_increment,
`kd_barang` int(12) NOT NULL,
`jumlah` int(11) NOT NULL,
`harga` int(11) NOT NULL,
`total` int(11) NOT NULL,
PRIMARY KEY (`kd_jual`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Setelah table Barang dan Jual telah tercipta didalam sebuah databases maka tahapan selanjutnya adalah melihat isi table masing-masing dengan perintah :
Select * from barang ;
Select * from jual ;
Maka hasilnya pada table barang akan menampilkan record data dari field kd_barang,jenis_barang,nm_barang,stock, namun pada table jual tidak menampilkan apa pun karna memang pada table jual belum di inputkan record hi...! Untuk itu cobakan perintah berikut ini intuk mengisi record table jual.


INSERT INTO `jual` ( `kd_barang`, `jumlah`, `harga`, `total`)
VALUES (111, 1, 3000, 3000);

Dan tampilkan table barang


Select * from barang ;

Perhatikan pada field kd_barang = 111 Setelah data jual diinputkan dimana kode barang 111 yang merupakan jenis barang Odol dan nama barang adalah Close-up serta jumlah stock adalah 12 dari table barang .kenapa kode barang 111 tersebut sudah terjual 1 namun stocknya tidak berkurang tetap saja 12.? Permasalahn pada kasus ini terjadinya tidak konsistenya suatu data.

Kasus :
Bagaimana caranya agar setiap pembelian barang maka stok yang ada pada table
barang berkurang secara otomatis setiap terjadi penjualan..?
Jawab: Solusinya adalah mengunakan sourcecode TRIGGERs berikut scriptnya:
Nama trigger = stock_barang

DELIMITER //
CREATE TRIGGER stock_barang
AFTER INSERT ON jual
FOR EACH ROW
BEGIN
UPDATE barang SET stock=stock-new.jumlah where kd_barang=new.kd_barang ;
END ;
//
DELIMITER ;

Maksud dari perintah DELIMITER // (Awal) dan DELIMITER ; (akhir) menyatakan perintah eksekusi dari trigger diawali dengan double slash // dan diakhiri dengan perintah double slash // sesudah perintah END dan dikembalikan kembali perintah exsekusi dengan tanda titik koma; yang di tunjukan pada perintah DELIMITER ; (akhir)
Nah...! pada langkah selanjutnya inputkan data penjualan :

INSERT INTO `jual` (`kd_barang`, `jumlah`, `harga`, `total`)
 VALUES(111, 2, 4000, 8000);



Dan tampilkan data barang

Select * from barang ;


Maka akan terlihat stock barang dengan kode barang 111 berkurang secara otomatis dimana stok awal 12 menjadi 10 karna 2 barang telah terjual.
Penjelasan dari trigger diatas adalah trigger dibuat dengan nama stock_barang dimana operasi suatu baris akan dilakukan setelah(After) terjadi penginput-an data pada table penjualan dengan eksekusi file stok pada table barang akan dikurangkan dengan jumlah barang baru yang di jual dengan syarat dari kode barang pada table barang sama dengan kode barang pada table jual.



Sumber

Data Tetap Konsisten dengan SQL Trigger Rating: 4.5 Diposkan Oleh: kreasi

 

Top