Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
1Activity
0 of .
Results for:
No results containing your search query
P. 1
Bab Vi Trigger

Bab Vi Trigger

Ratings: (0)|Views: 442|Likes:
Published by KEINACANTIK

More info:

Published by: KEINACANTIK on Sep 10, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

11/09/2012

pdf

text

original

 
BAB VITRIGGER
6.1 DEFINISI TRIGGER
Trigger adalah sebuah objek database yang diasosiasikan dengan sebuah tabel danakan aktif (terpicu/trigger) ketika sebuah event terjadi pada tabel tersebut
Trigger hanya terjadi ketika ada eksekusi INSERT, DELETE dan UPDATE pada tabelyang bersangkutan.
Waktu eksekusi trigger yang mungkin terjadi terdiri dari 2 yaitu BEFORE dan AFTERdari statement SQL-nya
6.2 KEUNTUNGAN MENGGUNAKAN TRIGGER
Trigger dapat digunakan untuk mengubah data sebelum proses INSERT dilakukan atauuntuk memberikan nilai default. Misal mengubah data yang diluar nilai yangdiperbolehkan. Misalnya, jika ada pengisian nilai diatas 100, maka akan dijadikan 100.
 Anda dapat menyimpan data suatu record ke tabel lain (misalnya history) sebelum datatersebut diupdate atau didelete. Sehingga semua perubahan data dapat terlacak darisejak data itu dibuat.
6. 3 STRUKTUR TRIGGERCREATE TRINGGER nama_trigger { BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON nama_tabelFOR EACH ROWStatement-statement6.4 MENGAKSES NILAI BARU DAN LAMA
Didalam trigger, anda dapat mengakses data lama dan baru. Data lama dapatdireference dengan record OLD dan data baru dapat dideference dengan record NEW.OPERASINEW(READ/WRITE)OLD(READ)INSERTUPDATEDELETE
Untuk mengacu ke sebuah field dapat ditulis dengan NEW.namafield atauOLD.namafield.
CONTOH 1
 Ada sebuah database dbAkdemik yang mempunyai tabel mahasiswa {nim, nama,alamat}.
Buatlah sebuah trigger yang akan menyimpan history alamat. Jika sebuah alamatberubah, maka alamat lama harus disimpan ke tabel history_alamat_mhs.
JAWAB :
Persiapan awal
 mysql> CREATE DATABASE dbAkademik; mysql> USE dbAkademik; mysql> CREATE TABLE mhs(-> Nim VARCHAR(10) PRIMARY KEY,-> Nama VARCHAR(50) Not Null,-> Alamat VARCHAR(200) Not Null); mysql> INSERT INTO mhs values-> ('09.53.0042','Septario Sagita','Jl. aa No.1'),-> ('09.53.0045','Tanto Taufik N','Jl. bb No.2'),-> ('09.53.0062','Irfan Fajarudy','Jl. cc No.3'); mysql> CREATE TABLE history_alamat_mhs(-> Waktu datetime,-> Nim VARCHAR(8),-> Alamat VARCHAR(200),-> Oleh VARCHAR(50));
1
 
Pembuatan trigger 
 mysql> DELIMITER // mysql> DROP TRIGGER IF EXISTS trig_update_mhs //Query OK, 0 rows affected, 1 warning (0.02 sec) mysql> CREATE TRIGGER trig_update_mhs-> AFTER UPDATE ON mhs-> FOR EACH ROW -> BEGIN-> INSERT INTO history_alamat_mhs-> VALUES (now(), OLD.nim, OLD.alamat, USER());-> END//Query OK, 0 rows affected (0.09 sec) mysql> DELIMITER ;
Contoh penggunaan trigger 
 mysql> UPDATE mhs SET alamat='Ds. Lembah Jetis Rt 32/11 Madiun'-> WHERE nim='09.53.0042'; mysql> UPDATE mhs SET alamat='Jl. Setiyasa 12 Madiun'-> WHERE nim='09.53.0045'; mysql> UPDATE mhs SET alamat='Jl. Ronggo Pustoko Rt 06 Rw 03 Madiun'-> WHERE nim='09.53.0062'; mysql> select * from mhs;+------------+-----------------+---------------------------------------+| Nim | Nama | Alamat |+------------+-----------------+---------------------------------------+| 09.53.0042 | Septario Sagita | Ds. Lembah Jetis Rt 32/11 Madiun || 09.53.0045 | Tanto taufik N | Jl. Setiyasa 12 Madiun || 09.53.0062 | Irfan Fajarufy | Jl. Ronggo Pustoko Rt 06 Rw 03 Madiun |+------------+-----------------+---------------------------------------+ mysql> select * from history_alamat_mhs;+---------------------+------------+-------------+----------------+| Waktu | Nim | Alamat | Oleh |+---------------------+------------+-------------+----------------+| 2010-10-19 03:41:43 | 09.53.0042 | Jl. aa No.1 | root@localhost || 2010-10-19 03:42:32 | 09.53.0045 | Jl. bb No.2 | root@localhost || 2010-10-19 03:43:13 | 09.53.0062 | Jl. cc No.3 | root@localhost |+---------------------+------------+-------------+----------------+
Untuk melihat semua alamat yang pernah digunakan mhs yang bernim ’09.53.0042’adalah :
 mysql> (SELECT now() waktu, alamat FROM mhs WHERE nim='09.53.0042')-> UNION-> (SELECT waktu,alamat FROM history_alamat_mhs WHERE nim='09.53.0042')-> ORDER BY waktu DESC;+---------------------+----------------------------------+| waktu | alamat |+---------------------+----------------------------------+| 2010-10-19 04:00:05 | Ds. Lembah Jetis Rt 32/11 Madiun || 2010-10-19 03:41:43 | Jl. aa No.1 |+---------------------+----------------------------------+
Trigger pertama mempunyai kekurangan yaitu ketika ada perubahan di tabel mhswalaupun tidak mengubah kolom alamat, maka statement INSERT di tabel history akandijalankan. Trigger ini bisa dioptimalkan dengan membuat trigger seperti dibawah ini :
 
 mysql> DELIMITER // mysql> DROP TRIGGER IF EXISTS trig_update_mhs // mysql> CREATE TRIGGER trig_update_mhs-> AFTER UPDATE ON mhs-> FOR EACH ROW -> BEGIN-> 
IF OLD.alamat <> NEW.alamat THEN 
-> INSERT INTO history_alamat_mhs-> VALUES(now(),OLD.nim,OLD.alamat,USER());-> 
END IF;
-> END //Query OK, 0 rows affected (0.03 sec) mysql> DELIMITER ;
2
 
CONTOH 2
Membuat sebuah trigger yang akan dieksekusi ketika ada perubahan NIM di tabel mhsyang akan melakukan update ke tabel history_alamat_mhs untuk menyesuaikan NIM-nyaagar relasinya tidak terlepas.
 mysql> DELIMITER // mysql> DROP TRIGGER IF EXISTS trig_update_nim // mysql> CREATE TRIGGER trig_update_nim -> AFTER UPDATE ON mhs-> FOR EACH ROW -> BEGIN-> IF OLD.nim <> NEW.nim THEN-> UPDATE history_alamat_mhs SET nim=NEW.nim WHERE nim=OLD.nim;-> END IF;-> END//ERROR 1235 (42000): This version of MySQL doesn't yet support 'multipletriggers with the same action time and event for one table'
Jika trigger tersebut dieksekusi maka akan terlihat ada peringatan berisi : “
This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for onetable”
yang artinya anda tidak bisa membuat trigger pada sebuah tabel pada waktu dan eventyang sama.
Solusi yang bisa dilakukan adalah menggabung isi trigger 
trig_update_mhs
dengan isi trigger yang baru
 mysql> DELIMITER // mysql> DROP TRIGGER IF EXISTS trig_update_mhs // mysql> CREATE TRIGGER trig_update_mhs-> AFTER UPDATE ON mhs-> FOR EACH ROW -> BEGIN-> IF OLD.alamat <> NEW.alamat THEN-> INSERT INTO history_alamat_mhs-> VALUES(now(),OLD.nim,OLD.alamat,USER());-> END IF;-> IF OLD.nim <> NEW.nim THEN-> UPDATE history_alamat_mhs SET nim=NEW.nim WHERE nim=OLD.nim;-> END IF;-> END//Query OK, 0 rows affected (0.00 sec) mysql> DELIMITER ;
Pengunaan trigger 
trig_update_mhs
yang baru :
 mysql> SELECT * FROM history_alamat_mhs;+---------------------+------------+------------------------+----------------+| Waktu | Nim | Alamat | Oleh |+---------------------+------------+------------------------+----------------+| 2010-10-19 03:41:43 | 09.53.0042 | Jl. aa No.1 | root@localhost || 2010-10-19 03:42:32 | 09.53.0045 | Jl. bb No.2 | root@localhost || 2010-10-19 03:43:13 | 09.53.0062 | Jl. cc No.3 | root@localhost || 2010-10-19 03:50:41 | 09.53.0045 | Jl. Setiyasa 12 Madiun | root@localhost |+---------------------+------------+------------------------+----------------+ mysql> UPDATE mhs SET nim='09.53.1045' WHERE nim='09.53.0045'; mysql> SELECT * FROM history_alamat_mhs;+---------------------+------------+------------------------+----------------+| Waktu | Nim | Alamat | Oleh |+---------------------+------------+------------------------+----------------+| 2010-10-19 03:41:43 | 09.53.0042 | Jl. aa No.1 | root@localhost || 2010-10-19 03:42:32 | 09.53.1045 | Jl. bb No.2 | root@localhost || 2010-10-19 03:43:13 | 09.53.0062 | Jl. cc No.3 | root@localhost || 2010-10-19 03:50:41 | 09.53.1045 | Jl. Setiyasa 12 Madiun | root@localhost |+---------------------+------------+------------------------+----------------+4 rows in set (0.00 sec)
CONTOH 3
Membuat sebuah trigger yang akan menghapus semua data pada tabel history_alamat_mhsketika ada penghapusan pada tabel mhs.
 mysql> DELIMITER // mysql> DROP TRIGGER IF EXISTS trig_delete_mhs //
3

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->