Trigger adalah sebuah objek database yang di asosiasikan dengan sebuah tabel dan akan aktif (terpicu/trigger) ketika sebuah event terjadi pada tabel tersebut
2. Definisi Trigger
• Trigger adalah sebuah objek database yang di
asosiasikan dengan sebuah tabel dan akan aktif
(terpicu/trigger) ketika sebuah event terjadi pada tabel
tersebut
• Trigger hanya terjadi ketika ada eksekusi INSERT,
DELETE, dan UPDATE pada tabel yang
bersangkutan
• Waktu eksekusi trigger yang mungkin terjadi terdiri
dari 2 yaitu BEFORE dan AFTER dari statement
SQLnya
agus andri putra, ST.
3. Keuntungan menggunakan Trigger
Trigger dapat digunakan untuk mengubah data
sebelum proses INSERT dilakukan atau untuk
memberikan nilai default, misalnya mengubah data
diluar nilai yang diperbolehkan, contoh : jika ada
pengisian nilai diatas 100, maka akan di jadikan
100.
Kita dapat menyimpan data suatu record ke tabel
lain ( misalnya history) sebelum data tersebut
diupdate atau di delete. Sehingga semua
perubahan data dapat dilacak dari sejak data itu di
buat
agus andri putra, ST.
5. Mengakses nilai baru dan lama
Dalam trigger, kita dapat mengakses data lama
dan data baru . Data lama dapat direference
dengan record OLD dan data baru dengan record
NEW
Untuk mengacu ke sebuah field dapat ditulis
dengan NEW.nama_field atau OLD.nama_field
agus andri putra, ST.
6. Contoh 1
Ada sebuah tabel mahasiswa ( nim, nama,
alamat)
Buatlah sebuah trigger yang akan menyimpan
history alamat. Jika sebuah alamat berubah,
maka alamat lama harus disimpan di tabel
history alamat.
agus andri putra, ST.
7. Kemudian isi tabel tersebut sesuai dengan type data dan nama field
nya
Dan siapkan tabel history untuk penyimpanan selanjutnya :
agus andri putra, ST.
9. Contoh penggunaan trigger
Mengubah data yang sudah dengan :
Maka data yang lama akan disimpan di tabel history_alamat_mahasiswa
agus andri putra, ST.
10. Untuk bisa melihat alamat yang pernah di
pakai oleh nim “1210705138”
Inilah tampilannya :
agus andri putra, ST.
11. Optimalisasi trigger
Trigger pertama mempunyai kekurangan yaitu ketika
ada perubahan di tabel ‘mahasiswa’ walaupun tidak
mengubah kolom alamat, maka statement INSERT
ditabel history akan dijalankan. Untuk
mengoptimalkannya dengan membuat trigger seperti
ini :
agus andri putra, ST.
12. Contoh 2
Buatlah suatu trigger yang akan dieksekusi ketika ada
perubahan NIM di tabel ‘mahasiswa’ yang akan
melakukan update ke tabel ‘history_alamat_mahasiswa’
untuk menyesuaikan NIM-nya agar relasinya tidak
terlepas
agus andri putra, ST.
13. Jika kita mengeksekusi trigger tersebut maka akan
peringatan yang berisi :
Artinya kita tidak bisa membuat multiple trigger
pada sebuah tabel pada waktu dan event yang
sama
Solusi yang bisa dilakukan adalah menggabung isi
trigger trig_update_mahasiswa dengan isi trigger
baru
agus andri putra, ST.
15. Perubahan contoh 2
Hasil :
UPDATE mahasiswa SET nim= 1210705140 WHERE nim= 1210705138;
Hasil :
agus andri putra, ST.
16. Keterangan tambahan
Trigger pada contoh sebelumnya bisa dimodifikasi
untuk membuat trigger yang akan menghapus semua
data pada tabel ‘history_alamat_mahasiswa’ ketika ada
penghapusan pada tabel ‘mahasiswa’
Hal tersebut bisa dilakukan dengan membuat trigger
“AFTER DELETE ON mahasiswa’ yang akan
menghapus semua data pada tabel
history_alamat_mahasiswa yang sesuai nim-nya
dengan nim dari tabel ‘mahasiswa’ yang akan dihapus
(“DELETE FROM history_alamat_mahasiswa WHERE
nim=OLD.nim”)
agus andri putra, ST.
17. Contoh 3
Buatlah suatu trigger yang mencegah perubahan
pada primary key tabel ‘mahasiswa’ (field nim). Jika
ada perubahan, maka nim tidak boleh berubah
Hal ini dapat dilakukan yaitu dengan mengeset nilai
nim yang baru (NEW.nim) dengan nilai yang sama
(OLD.nim)
agus andri putra, ST.
18. Contoh 3
Buat trigger baru dengan nama “trig_update_nim_mahasiswa”
agus andri putra, ST.
19. Hasil
Nim baru , tapi tidak akan berpengaruh
agus andri putra, ST.
20. Latihan praktek
Buatlah sebuah tabel untuk menyimpan data
transaksi transfer yang strukturnya sebagai berikut :
NoTransaksi :INT auto_increment
WaktuTransaksi :DATATIME
NoRekPengirim :INT, FK REF rekening(No)
NoRekPenerima :INT, FK REF rekening(No)
BesarTransfer :DOUBLE
Jika penambahan data dari tabel transfer (AFTER
INSERT ON transfer), maka akan mengupdate
saldo pada rekening yang bersangkutan sesuai
dengan besar transfer
Kelas IF-B
agus andri putra, ST.