Transaction dan Trigger M. Saefudin SKom, MMSI
Kompetensi Dasar: 1. Memahami konsep transaction 2. Memahami konsep trigger 3. Memahami penerapan transaction dan trigger
Indikator: 1. Mampu menjelaskan manfaat dari transaction dan trigger 2. Memahami dan mampu menggunakan transaction dan trigger terhadap basis data
Pengantar Transaction dalam pemrograman database digunakan untuk menangani terjadinya error dalam memanipulasi database. Sedangkan trigger merupakan tipe spesial dari Store Procedure yang berjalan secara Event Driven saat user melakukan modifikasi khusus terhadap table tertentu. SQL Server akan menjalankan Trigger ketika ada perintah INSERT, UPDATE, DELETE pada tabel. Trigger biasanya digunakan untuk menjaga integrasi data, menangani penggantian data serta dapat melakukan aksi lain saat tabel dimodifikasi dengan mengenai pernyataan INSERT, UPDATE, DELETE.
Kegunaan Trigger • Store procedure yang telah dibuat dapat digunakan dengan memanggilnya, namun store procedure dapat pula dieksekusi jika suatu tabel mengalami perubahan hal yang demikian dinamakan dengan trigger. • Secara sederhana dapat dikatakan bahwa trigger adalah perkataan 'jalankan fungsi ini jika kejadian terjadi pada tabel ini'.
Manfaat Trigger Pengaktifan trigger dapat memberikan manfaat yang sangat besar seperti digunakan untuk: 1. Mencegah kesalahan pemasukan data. 2. Mencegah kesalahan penghapusan data. 3. Mencegah kesalahan pengupdatean data.
Membuat Trigger Trigger dibuat dengan perintah: CREATE TRIGGER Triggername ON Tablename FOR INSERT, UPDATE, DELETE AS DECLARE Statements SQL
Komponen trigger 1. Keterangan kapan trigger diaktifkan. 2. Tabel yang direferensikan atau diasosiasikan oleh trigger tersebut. 3. Perintah SQL yang dijalankan oleh trigger tersebut.
Struktur tabel atlet
Akan dibuat sebuah trigger UPDATE pada tabel atlet di atas yang akan dijalankan ketika tabel atlet dikenai perintah UPDATE.
create trigger T_UpdateAtlet on atlet for update as print 'Tabel Atlet telah diupdate‘ Untuk melihat hasilnya kita harus melakukan perintah UPDATE terhadap tabel atlet. update atlet set nama_atlet='Yuliati' where id_atlet=3 Hasil dari eksekusi statement di atas adalah: Tabel Atlet telah diupdate (1 row(s) affected)
Pada saat terjadi UPDATE yang mengaktifkan trigger T_UpdateAtlet, trigger menyimpan data hasil modifikasi di dalam sebuah tabel yang bernama Inserted. Sedangkan data dari tabel atlet yang dihapus akan disimpan dalam tabel yang bernama Deleted.
Mengubah Trigger alter trigger T_UpdateAtlet on atlet for update as print 'Tabel Atlet telah diupdate' select * from inserted select * from deleted Setelah trigger T_UpdateAtlet diubah, kita kenakan perintah UPDATE pada tabel atlet
Transaction • Contoh pemakaian transaction seperti kasus ini: gaji_kotor di tabel Penggajian dihitung dari penjumlahan antara gaji_pokok dan tunjangan dari tabel Jabatan. Jika kita mengubah gaji_pokok dan atau tunjangan di tabel Jabatan maka gaji_kotor di tabel Penggajian ikut berubah. • Misalnya gaji_pokok mula-mula adalah 1200000 dan tunjangan mula-mula adalah 350000 maka gaji_kotor mula-mula adalah 1550000. Jika gaji_pokok kita ubah menjadi 1300000 maka gaji_kotor sekarang adalah 1650000. • Kegunaan dari pemakaian transaction adalah jika kita berhasil mengubah gaji_pokok dan gaji_kotor dengan baik maka pengubahan akan dilakukan, tetapi jika pada saat kita mengubah data gaji_pokok kemudian tiba-tiba terjadi error sehingga gaji_kotor tidak terjadi perubahan maka pengubahan dibatalkan.
Sintaks dasar dari transaction : BEGIN TRANSACTION Perintah_Perintah_SQL If @@error = 0 Commit Transaction Else Rollback Transaction
Trigger HapusData pada tabel Jabatan
Trigger berikut untuk proses input data karyawan, jika kode jabatan belum ada dalam tabel Jabatan maka kode tersebut akan diisikan dulu ke tabel Jabatan dengan nama jabatan ‘‘, gaji_pokok=0 dan tunjangan=0.
Menonaktifkan Trigger Perintah ALTER TABLE dapat dipakai untuk mengaktifkan atau tidak mengaktifkan suatu trigger tanpa menghapus definisi trigger tersebut. Oleh karena setiap trigger didefinisikan pada sebuah tabel maka kita menggunakan perintah ALTER TABLE bukan ALTER TRIGGER. Untuk tidak mengaktifkan trigger DeleteMHS, dipakai option DISABLE TRIGGER: alter table atlet disable trigger T_UpdateAtlet
Latihan 1.Buatlah trigger untuk menjaga agar email yang diisikan ke dalam tabel Guestbook selalu benar (misal mengandung tanda @ dan .com, .net. dan lain-lain). 2.Buatlah trigger untuk menjaga agar nama yang diisikan ke dalam tabel Mahasiswa selalu berisi karakter (a...z).
Latihan 3. Buatlah trigger untuk menjaga agar bobot SKS yang diisikan ke dalam tabel Mata_Kuliah selalu berisi bilangan bulat (1...6). 4. Buatlah trigger untuk menjaga agar gender yang diisikan ke dalam tabel Karyawan selalu berisi L atau P. 5. Buatlah trigger untuk menjaga agar nilai huruf yang diisikan ke dalam tabel KHS selalu berisi karakter huruf (A...E).
Latihan 6. Buatlah trigger untuk menjaga agar nomor mahasiswa yang diisikan ke dalam tabel Mahasiswa selalu benar yaitu dengan ketentuan karakter pertama dan kedua berisi karakter angka yang mencerminkan tahun angkatan, karakter ketiga merupakan karakter titik, karakter keempat dan kelima berisi karakter angka yang mencerminkan kode jurusan (01 adalah Diploma III Teknik Informatika, 11 adalah Strata I Teknik Informatika, 02 adalah Diploma III Manajemen Informatika dan 12 adalah Strata I Sistem Informasi), karakter keenam merupakan karakter titik dan empat karakter berikutnya berisi karakter angka yang merupakan nomor mahasiswa.
Latihan 7. Buatlah trigger yang digunakan untuk transaction pada tabel Penggajian. Kasusnya seperti ini: seorang karyawan hanya bisa melakukan transaksi penggajian 1 kali dalam sebulan. Trigger yang anda buat digunakan untuk mengecek jika pada saat terjadi penginsertan data ke tabel Penggajian, jika kode_karyawan tersebut telah menerima gaji pada bulan itu juga maka penginsertan data digagalkan, tetapi jika pada bulan tersebut karyawan belum menerima gaji, maka penginsertan di-commit. Contoh jika kode_karyawan K-0001 telah menerima gaji pada tanggal 20/02/2006, kemudian terjadi penginsertan data gaji lagi dengan tanggal penggajian 20/02/2006 atau 25/02/2006 maka proses penginsertan digagalkan karena pada bulan 02 karyawan tersebut telah menerima gaji.