laporan 8 trigger

24
LAPORAN PRAKTIKUM BASIS DATA MODUL VIII TRIGGER Dilaksanakan tanggal 21 November 2009 Asisten Praktikum M. Ja’far S. KELOMPOK 1: 1. RETNO INDAH R (208533414723/OFF.B) 2. HARWI PENDA H. (208533414717/OFF.B) JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS NEGERI MALANG

Upload: retno-indah-r

Post on 30-Sep-2015

774 views

Category:

Documents


62 download

DESCRIPTION

Laporan 8 Trigger

TRANSCRIPT

Judul tugas

LAPORAN

PRAKTIKUM BASIS DATA

MODUL VIIITRIGGERDilaksanakan tanggal 21 November 2009

Asisten Praktikum

M. Jafar S.

KELOMPOK 1:

1. RETNO INDAH R (208533414723/OFF.B)

2. HARWI PENDA H. (208533414717/OFF.B)

JURUSAN TEKNIK ELEKTRO

FAKULTAS TEKNIK

UNIVERSITAS NEGERI MALANG

Desember, 2009TRIGGERA. TUJUAN

1. Memahami konsep dasar trigger di dalam basis data.

2. Memahami implementasi trigger sebagai bentuk respon atas suatu kejadian.

3. Mampu menyelesaikan kasus-kasus manipulasi data yang kompleks dengan memanfaatkan trigger.B. DASAR TEORI

1. Trigger Trigger adalah sebuah objek yang bekerja bersama sebuah tabel dan digunakan untuk memeriksa sebuah operasi atau kejadian tertentu pada sebuah tabel. Objek ini akan diaktifkan atau dijalankan oleh MySQL apabila terjadi operasi atau kejadian tertentu pada sebuah tabel. Oleh karena sifatnya yang dapat bekerja bersama tabel, trigger sering dipergunakan untuk memeriksa sebuah operasi terhadap sebuah tabel sebelum operasi tersebut dijalankan oleh MySQL.Trigger adalah sebuah subrutin yang disimpan dalam database dan dijalankan secara implisit sebagai respon terhadap perubahan yang telah ditentukan dalam database.

Perintah DML seperti INSERT, UPDATE, dan DELETE adalah pemicu umum terjadinya trigger. Operasi DDL seperti ALTER dan DROP juga dapat memicu dijalankannya trigger.Tipe trigger antara lain :

a. Application trigger : diaktifkan pada saat terjadi event yang berhubungan dengan sebuah aplikasi.

b. Database trigger : diaktifkan pada saat terjadi event yang berhubungan dengan data (seperti operasi DML) atau event yang berhubungan dengan sistem (semisal log on atau shutdown) yang terjadi pada sebuah skema atau database.Trigger juga dapat didefinisikan sebagai himpunan kode (prosedural) yang dieksekusi secara otomatis sebagai respon atas suatu kejadian berkaitan dengan tabel basis data. Kejadian (event) yang dapat membangkitkan trigger umumnya berupa pernyataan INSERT, UPDATE, dan DELETE.

a. INSERT, yaitu operasi ketika terjadi penambahan data pada sebuah tabel.b. DELETE, yaitu operasi ketika terjadi penghapusan data pada sebuah tabel.c. UPDATE, yaitu operasi ketika terjadi pengubahan isi data yang telah ada pada sebuah tabel.Fungsi dan kelebihan penggunaan trigger antara lain:

Memperbaiki integritas data dengan membuat integrity constraint yang kompleks yang mana tidak mungkin ditangani oleh sintaks pembuatan tabel.

Memvalidasi transaksi data.

Memperbaiki keamanan database dengan menyediakan audit yang lebih kompleks mengenai informasi perubahan database dan user siapa yang melakukan perubahan.

1.1 Klasifikasi TriggerBerdasarkan ruang lingkupnya, trigger dibedakan menjadi dua jenis, antara lain:

a. Row trigger mendefinisikan aksi untuk setiap baris tabel.

b. Statement trigger hanya berlaku untuk setiap pernyataan INSERT, UPDATE, dan DELETE.Berdasarkan perilaku (behaviour) eksekusi, trigger dibedakan menjadi beberapa jenis, antara lain:

a. Trigger BEFORE : merepresentasikan waktu eksekusi trigger sebelum pernyataan-pernyataan yang berkorespondensi.b. Trigger AFTER : merepresentasikan waktu eksekusi trigger sesudah pernyataan-pernyataan yang berkorespondensi.1.2 Penggunaan Tigger

Trigger dibuat sesuai dengan kebutuhan. Ada kalanya trigger perlu dibuat dan kadangkala tidak perlu dibuat.

Trigger perlu dibuat pada saat :

a. Membentuk sebuah aksi tertentu terhadap suatu event.

b. Memusatkan operasi global

Tigger tidak perlu dibuat, jika:

a. Fungsionalitas yang diperlukan suatu ada pada Oracle server.

b. Duplikat atau sama dengan fungsi trigger yang lain.Prosedur bisa dibuat dalam database, kemudian prosedur tersebut dipanggil pada trigger. Jika penggunaan trigger terlalu berlebihan, maka akan menyebabkan sifat ketergantungan yang kompleks sehingga akan mempersulit pemeliharaan dari aplikasi yang besar. 1.3 Trigger MySQL

MySQL mendukung fitur trigger termasuk juga stored procedure dan view sejak versi 5.02. Sebagaimana objek-objek lainnya, trigger diciptakan menggunakan pernyataan CREATE.1. Sintaks umum dari trigger :CREATE [OR REPLACE] TRIGGER [user.]nama_trigger

{BEFORE | AFTER | INSTEAD OF}

{DELETE | INSERT | UPDATE [OF nama_kolom [, nama_kolom] ...]}

[OR {DELETE | INSERT | UPDATE [OF column [, column] ...]}]...

ON [user.]{nama_tabel | nama_view}

[{REFERENCING {OLD [AS] old_value | NEW [AS] new_value} ...]

FOR EACH {ROW | STATEMENT} [WHEN (condition)]

PL/SQL_BLOCK

2. Sintaks pendefinisian trigger :CREATE

[DEFINER = { user | CURRENT_USER }]

TRIGGER trigger_name trigger_time trigger_event

ON tbl_name FOR EACH ROW trigger_stmt

Keterangan Sintaks Trigger :1. DEFINER menunjukkan nama user yang mempunyai hak akses untuk mengakses Trigger.

2. Trigger_time menunjukkan saat Trigger tersebut dijalankan. Terdiri dari Before atau After

3. Trigger_time menandakan saat keadaan bagaimana Trigger tersebut aktif. Terdiri dari

a. Insert : Trigger aktif saat baris baru dimasukkan ke dalam tabel

b. Update : Trigger aktif saat ada baris diperbaharui dimasukkan di dalam tabel

c. Delete :Trigger aktif saat baris dihapus dalam tabelMySQL tidak mengijinkan multiple trigger dengan waktu aksi dan event sama per tabel. Misalkan di tabel A sudah didefinisikan trigger AFTER INSERT, maka kita tidak boleh mendefinisikan trigger AFTER INSERT lagi. Akan tetapi, AFTER EDIT, AFTER DELETE, atau BEFORE (INSERT, EDIT, dan DELETE) bisa dijalankan.C. LATIHANDalam praktikum ini digunakan 2 tabel yakni, tabel barang dan tabel barang yang akan dibuat.

1. Menggunakan Trigger

Gambar di atas memiliki arti untuk menambah nilai stok dengan nilai satu setiap kali ada penambahan data baru.

Perintah untuk menambah data baru. Penambahan item + inkremen stok

Trigger bekerja, yaitu setiap penambahan data baru akan menginkremen nilai stok.

Cara mendapatkan informasi mengenai daftar trigger yang telah terdefinisi. Cara ini menggunakan perintah SHOW TRIGGERS dan \G untuk menampilkan data secara vertikal.

Perintah DROP untuk menghapus trigger.2. Keyword OLD dan NEWKeyword OLD dan NEW digunakan untuk merujuk ke kolom-kolom tabel yang diasosiasikan denga trigger. Keyword OLD mengacu pada nilai lama, sedangkan NEW mengacu pada nilai baru. Dalam trigger INSERT hanya dapat digunakan keyword NEW karena tidak ada data lama.

10 + 10 =20

Penambahan data pembelian akan mengakibatkan nilai stok barang berubah menyesuaikan banyaknya nilai jumlah pembelian.

Berbeda dengan INSERT, trigger DELETE hanya bisa menggunakan keyword OLD.

Operasi UPDATE dapat memanfaatkan keyword NEW dan OLD.3. Trigger KompleksTrigger dapat membantu user dalam menyelesaikan persoalan yang kompleks terkait dengan basis data, misalnya hal-hal yang berkaitan dengan integritas atau audit data. Hal ini dikarenakan trigger mengandung pernyataan perulangan, percabangan, agregat, dan kode pemanggilan prosedur.Contoh trigger di bawah ini adalah trigger untuk memeriksa operasi penambahan data barang. Skenarionya, jika ada sudah ada, berikan status eksistensi barang; sebaliknya, data bisa langsung dimasukkan.

D. HASIL DAN PEMBAHASAN *1. Modifikasi trigger INSERT pembelian untuk menambahkan fitur pemberian bonus. Skenarionya, jika pembelian lebih dari 100 dan kurang dari 200, bonus 10; pembelian lebih dari 200 dan kurang dari 300, bonus 20; pembelian lebih dari 300, bonus 50. Ingat, aturan penyesuaian stok barang juga masih berlaku. (Point: 30)Source Code Program :

Hasil Eksekusi Programa. Tampilan data tabel barang sebelum trigger latihan 1 dijalankan.b. Ditambahkan data pada tabel pembelian dengan id_pem = 4, id_brg=A10, jml_beli=7. Operasi penambahan ini akan memicu atau sebagai trigger bagi tabel yang lain. Jumlah barang=7 merupakan jumlah barang yang tidak masuk dalam kriteria mendapatkan bonus dan kode barang (A10) sudah terdapat dalam tabel barang. Pada tabel pembelian dapat dilihat pada id_pem=4 data telah ditambahkan.

c. Hasil Trigger

Data stok lama (id_brg=A10) = 150

Data modifikasi (id_brg=A10)=157;dan tidak mendapat bonus.

d. Ketika data yang dimasukkan tidak terdapat pada tabel :

Kelemahan : Tetapi data ini tetap masuk dalam tabel pembelian.

e. Ditambahkan pembelian baru dengan jumlah barang = 200 dan id_brg = A10 yang telah tersedia pada tabel.

f. Tampilan tabel pembelian setelah pembelian baru ditambahakan. Kelemahan: id_pem belum menjadi primary key sehingga masih terdapat id_pem yang kembar.

g. Tampilan stok barang (A10) yang telah bertambah 200 barang tanpa mendapatkan bonus.Stok lama (A10) = 157

Stok baru (A10) = 157 + 200 (tanpa bonus) = 357

h. Penambahan data dengan jumlah barang yang dibeli lebih dari 300 barang. Menurut source code pembelian ini akan mendapatkan bonus 50 barang.

i. Tampilan tabel pembelian setelah id_pem=5 ditambahkan.

j. Stok lama (A10) = 357Stok baru (A10) = 709 yang terdiri dari 357 stok lama, 302 barang yang baru dibeli, 50 bonus dari pembelian >300.

2. Buat tabel pembayaran dengan fieldid_pem dan jumlah, kemudian tambahkan field harga di tabel barang. Modifikasi trigger INSERT pembelian untuk menambahkan fitur penghitungan nota pembayaran. Misalkan harga satuan barang A adalah Rp. 1000, dan terjadi pembelian 10 barang, maka jumlah pembayaran tercatat Rp. 10000. Ingat, aturan penyesuaian stok barang dan juga pemberian bonus masih berlaku di sini. (Point: 40)Penyelesaian :Source Code Program

DELIMITER //

CREATE TRIGGER LATIHAN2

AFTER INSERT ON PEMBELIAN

FOR EACH ROW

BEGIN

DECLARE BONUS INT(2);

DECLARE HARGA_BARU INT(8);

DECLARE HARGA_BARU_ITEM INT(8);

DECLARE ID_PEMBAYARAN_BARU VARCHAR(5);

SET ID_PEMBAYARAN_BARU = NEW.ID_PEM;

SET HARGA_BARU_ITEM =(SELECT HARGA FROM BARANG WHERE id_brg=new.id_brg);

SET HARGA_BARU = NEW.JML_BELI * HARGA_BARU_ITEM;

INSERT INTO PEMBAYARAN VALUES (ID_PEMBAYARAN_BARU, HARGA_BARU);

IF (NEW.JML_BELI BETWEEN 100 AND 200) THEN SET BONUS = 10;

ELSEIF (NEW.JML_BELI BETWEEN 200 AND 300) THEN SET BONUS = 20;

ELSEIF (NEW.JML_BELI > 300) THEN SET BONUS = 50;

ELSE SET BONUS = 0;

END IF;

UPDATE BARANG

SET STOK = STOK + NEW.JML_BELI + BONUS

WHERE ID_BRG = NEW.ID_BRG;

END //

DELIMITER ;

Hasil Eksekusi Program

1. Menambahkan field baru (harga_brg) pada tabel barang. Tampilan tabel barang yang telah dimodifikasi tapi field harga barang belum ditambahkan data (masih bernilai null).2. Tampilan tabel barang yang telah ditambahkan data harga barang. 3. Modifikasi tabel pembelian dengan menambahkan primary key pada field id_pem.

4. Modifikasi nama field harga_brg menjadi harga.

5. Pembuatan tabel pembayaran dengan kriteria sebagai berikut:

6. Masih belum ada data dari table pembayaran. Data dari table pembayaran, merupakan hasil operasi dari trigger INSERT pada table pembelian.

7. Operasi penambahan data (INSERT) pada table pembelian. Operasi ini merupakan trigger bagi table pembelian.

Hasil pembaharuan (update) data pada tabel barangHasil penambahan data pada table pembayaran, dengan kriteria tertentu

3. Buat tabel log_pembelian dengan fieldwaktu dan operasi. Selanjutnya, definisikan trigger di tabel pembelian untuk merekam operasi INSERT, UPDATE, dan DELETE, dan kemudian menyimpannya (sebagai bukti transaksi)di tabel log_pembelian. (Point: 50)

E. KESIMPULAN F. DAFTAR PUSTAKA

Amri, Choirul. 2003. TUTORIAL SQL. (sumber : http://www.choirulamri.or.id). Di akses on-line tanggal 27 Oktober 2009. Kadir, Abdul. 2002. PENUNTUN PRAKTIS BELAJAR SQL. Yogyakarta : ANDI

Priyanto, Rahmat. 2007. BELAJAR SENDIRI MENGUASAI MySQL. Jakarta : ELEX MEDIA KOMPUTINDO

Pengisian data pada tabel barang.

Tampilan tabel barang yang telah diisi data.

Pengisian data pada tabel pembelian.

Tampilan tabel pembelian yang telah diisi data

Sintak pembuatan tabel barang dengan field id_barang sebagai primary key.

Sintak pembuatan tabel pembelian.

Tampilan deskripsi tabel barang yang telah dibuat.

Tampilan deskripsi tabel pembelian yang telah dibuat.