TRIGGER SYAIFUL HUDA, S.Kom TRIGGER Trigger obyek didalam database yang berasosiasi dengan suatu tabel Trigger dapat diaktifasi ketika tabel tersebut dikenai event tertentu Event suatu kejadian yang menimpa tabel, bisa berupa penambahan, perubahan maupun penghapusan data ALASAN MENGGUNAKAN TRIGGER Trigger berfungsi untuk mengeksekusi satu atau sekumpulan perintah SQL secara otomatis ketika menambah, mengubah maupun menghapus sebuah baris data dalam suatu tabel Karena fungsi tersebut dalam pendefinisianya, trigger di tanam atau diasosiakan dengan sebuah tabel tertentu MANFAAT TRIGGER Trigger dapat menguji validitas data yang akan dimasukkan maupun yang akan digunakan untuk melakukan perubahan Trigger dapat memperoleh nilai lama dari baris data yang akan dihapus atau diubah (misalnya untuk keperluan pencatatan histori data dari suatu tabel) Trigger dapat mengubah nilai kolom pada tabel lain MANFAAT TRIGGER Trigger juga dapat meringankan proses lojik dari aplikasi atau stored procedure yang dikembangkan Alasanya proses validasi data sudah ditangani oleh trigger sehingga dalam aplikasi tidak perlu menuliskan kode program untuk melakukan hal tersebut. KONSEP TRIGGER Trigger adalah obyek database yang berisi kumpulan perintah SQL yang akan di eksekusi atau diaktifasi ketika suatu event terjadi Dalam suatu database dapat di definisikan lebih dari satu trigger asalkan nama dari masingmasing trigger berbeda Trigger harus berasosiasi dengan tabel tertentu sebagai pemicu trigger untuk menentukan kapan trigger bersangkutan dieksekusi KONSEP TRIGGER Trigger memiliki event : BEFORE INSERT, AFTER INSERT, BEFORE UPDATE, AFTER UPDATE, BEFORE DELETE, AFTER DELETE Trigger memiliki referensi NEW dan OLD EVENT TRIGGER Event peristiwa atau kejadian yang menunjukkan kapan suatu trigger akan diaktifasi Contoh : jika mendefinisikan trigger pada tabel BUKU dengan event AFTER INSERT, maka trigger akan diaktifasi setiap kali user melakukan penambahan data pada tabel BUKU EVENT TRIGGER EVENT KETERANGAN BEFORE INSERT Trigger akan diaktivasi sesaat sebelum data ditambahkan ke dalam suatu tabel AFTER UPDATE Trigger akan diaktivasi sesaat setelah data ditambahkan ke dalam suatu tabel BEFORE UPDATE Trigger akan dieksekusi sesaat sebelum data dalam suatu tabel diubah AFTER UPDATE Trigger akan diaktivasi sesaar setelah data dalam suatu tabel diubah BEFORE DELETE Trigger akan diaktivasi sesaat sebelum data dihapus dari suatu tabel AFTER DELETE Trigger akan diaktivasi sesaat setelah data dihapus dari suatu tabel MEMBUAT TRIGGER CREATE TRIGGER <nama trigger> (BEFORE | AFTER) (INSERT | UPDATE | DELETE) ON <nama tabel> FOR EACH ROW BEGIN <badan trigger> END CONTOH TRIGGER DELIMITER $$ CREATE TRIGGER tr_ai_pasien AFTER INSERT ON pasien FOR EACH ROW BEGIN INSERT INTO histori_pasien VALUES ( NEW.kode_pasien, NEW.kode_dokter, NEW.nama_pasien, NEW.tgl_lahir, NEW.alamat, ‘INSERT', NOW()); END$$ CEK PENGARUH TRIGGER Coba tambahkan data baru ke dalam tabel pasien: INSERT INTO pasien VALUES(‘1111-01-1’,’ D-01’,’ SUWARNO’,’ 1977-08-01’,’ JETIS DAGANGAN MADIUN’); Coba periksa tabel histori_pasien : SELECT * FROM histori_pasien; REFERENSI TRIGGER NEW DAN OLD NEW sebagai referensi dari baris data yang akan dimasukkan atau yang akan digunakan untuk mengubah data OLD sebagai referensi dari baris data yang akan ditimpa dengan data baru (melalui perintah UPDATE) dan dihapus (melalui perintah DELETE) PENTINGNYA TRIGGER ??? Pada saat mengeksekusi INSERT, database hanya memiliki referensi NEW yang berfungsi untuk menampung nilai-nilai kolom dari baris baru yang akan dimasukkan Pada saat mengeksekusi UPDATE, database memliki referensi NEW dan OLD. NEW menampung nilai kolom yang akan digunakan untuk melakukan perubahan sedangkan OLD berfungsi menampung nilai-nilai lama pada semua kolom yang ada dalam tabel bersangkutan Pada saat mengeksekusi DELETE, database hanya memiliki referensi OLD yang berfungsi untuk menampung nilai-nilai kolom dari baris data yang dihapus MENGHAPUS TRIGGER Perintah menghapus trigger dari database dengan perintah DROP TRIGGER DROP TRIGGER [<nama database>], <nama trigger>; DROP TRIGGER BUKUDB.tr_ai_buku; Atau DROP TRIGGER tr_ai_buku; HAK AKSES BEKERJA DENGAN TRIGGER Dalam pembuatan dan penghapusan trigger di dalam database, seorang user harus memiliki hak akses SUPER Jika didalam trigger, kita menggunakan referensi NEW dan OLD harus ada hak akses tambahan yang diberikan Untuk mengisi nilai kolo dengan perintah SET NEW <nama kolom = <nilai>, user bersangkutan harus memiliki hak akses UPDATE Untuk menggunakan NEW, <nama kolom> user bersangkutan harus memiliki hak akses SELECT BATASAN TRIGGER Kita tidak dapat menggunakan perintah CALL (perintah untuk mengeksekusi stored procedure) Kita tidak dapat melakukan transaksi (misalnya COMMIT dan ROOLBACK) Kita tidak dapat membuat trigger untuk tabel temporari