1. Perbedaan Before Dan After Insert Pada Trigger
Sesuai dengan nama nya before yaitu sebelum dan after yaitu setelah, artinya BEFORE INSERT Trigger akan diaktivasi / dijalankan sesaat sebelum data ditambahkan dari suatu table, berbeda dengan AFTER INSERT Trigger yaitu akan diaktivasi / dijalankan sesaat setelah data ditambahlan dari suatu table.
Logika yang saya gunakan pada trigger tersebut adalah jika terjadi penambahan data pada tabel transaksi, maka Trigger akan dijalankan saat sebelum data transaksi di tambahkan dan akan mengupdate tabel barang dengan column stok akan di kurangi dengan qty yang baru saja ditambahkan pada tabel transaksi dimana idbarang pada tabel barang sesuai dengan idbarang yang ditambahkan pada tabel transaksi. Lebih jelasnya, jika terjadi suatu transaksi barang, maka stock barang yang ada akan dikurangi sesuai dengan qty transaksinya.
Yang awalnya pada tabel barang baju memiliki stok 10, saat saya telah menambahkan data transaksi baju dengan jumlah 3 maka stok baju pada tabel barang akan di kurangi 3 menjadi 7, berikut adalah gambar perubahan pada tabel barang :
Lalu kita akan mencoba yang sebelumnya yaitu before insert, sekarang kita akan coba menggunakan after insert :
Maka tidak ada masalah dan tidak akan ada perbedaanya karena trigger di jalankan pada tabel yang berbeda.
Sekarang saya akan mencoba melakukan aksi Trigger di dalam 1 tabel yang sama :
Logika yang saya gunakan pada trigger tersebut adalah jika data yang baru ditambahkan pada tabel barang harga nya 10000 maka nama_barang akan otomatis terisi menjadi "Gelas".

Sesuai dengan gambar yang saya tambahkan pada data transaksi yaitu nama_barang adalah Kaos Kaki, tapi karena harga yang ditambahkan 10000 maka nama_barang tetap akan otomatis menjadi "Gelas". Selanjutnya saya akan mencoba merubah yang awalnya before insert menjadi after insert namun tidak bisa, akan muncul error seperti ini :
Mengapa before insert bisa, namun after insert tidak bisa?
Pada trigger BEFORE, Kita dapat mengubah nilai kolom langsung pada NEW (nilai yang akan dimasukkan, diupdate, atau dihapus). Trigger BEFORE dijalankan sebelum perubahan pada tabel sebenarnya dilakukan. Jadi, Kita dapat memanipulasi nilai yang akan digunakan dalam operasi tersebut. Namun, pada trigger AFTER, Kita tidak dapat lagi memodifikasi nilai kolom yang akan dimasukkan atau telah diubah. Trigger AFTER dijalankan setelah perubahan sebenarnya dilakukan pada tabel. Oleh karena itu, mencoba untuk mengubah nilai kolom NEW pada trigger AFTER akan menyebabkan kesalahan. Jadi, ketika menggunakan trigger AFTER, perhatikan bahwa nilai kolom tidak dapat diubah pada saat trigger dijalankan, karena operasi database sebenarnya sudah terjadi.
2. Apa perbedaan penggunaan NEW dan OLD pada kolom?
NEW berfungsi sebagai referensi dari baris data yang akan dimasukkan atau yang
akan digunakan untuk mengubah data. Sedangkan, OLD berfungsi sebagai referensi dari baris data yang ditimpa dengan data baru
melalui perintah update dan dihapus melalui perintah delete.
Referensi NEW digunakan pada saat mengeksekusi perintah INSERT, sedangkan
pada saat UPDATE referensi NEW dan OLD digunakan dua-duanya, serta perintah
DELETE hanya menggunakan referensi OLD.
Berikut adalah contoh dari penggunaan NEW pada Trigger, pada gambar tersebut saya menggunakan NEW untuk data baru qty dan data baru id_barang yang ditambahkan :
Dan berikut adalah contoh dari penggunaan OLD pada Trigger, pada gambar tersebut saya menggunakan OLD untuk data lama qty dan data lama id_barang yang ditambahkan :
3. Jika data yang dirubah adalah tabel sendiri menggunakan event apa?
Berikut saya akan berikan contoh trigger untuk merubah tabel sendiri :
Sesuai kode pada gambar saya menggunakan if beserta end if dan then. IF NEW.harga = 10000 THEN adalah kondisi yang menguji apakah nilai kolom harga pada baris yang baru (NEW.harga) sama dengan 10000. Jika kondisi ini benar, maka blok pernyataan di dalam IF
akan dieksekusi. SET NEW.nama_barang = "Gelas" adalah pernyataan yang mengatur nilai kolom nama_barang pada baris yang baru (NEW.nama_barang) menjadi "Gelas". Ini akan terjadi jika kondisi dalam IF benar. END IF menandai akhir dari blok IF. Jika tidak meggunakan if beserta end if dan then, maka trigger tidak bisa berjalan, dan akan muncul error seperti pada gambar berikut :
Catatan : Mengapa jika kita melakukan trigger pada tabel yang berbeda before insert dan after insert tidak akan jadi masalah, tapi jika melakukan trigger pada 1 tabel maka akan berpengaruh?
Ketika Kita membuat trigger pada tabel yang berbeda (seperti trigger BEFORE dan AFTER pada dua tabel yang berbeda), Kita mengoperasikan dua konteks yang terpisah: satu trigger akan berinteraksi dengan satu tabel, dan yang lainnya dengan tabel yang berbeda. Ini memungkinkan Kita untuk memiliki logika yang berbeda untuk dua peristiwa yang berbeda. Namun, ketika Kita membuat dua trigger (BEFORE dan AFTER) pada tabel yang sama, mereka masih berbagi konteks yang sama. Trigger BEFORE dijalankan sebelum operasi (misalnya, INSERT) sebenarnya terjadi, dan trigger AFTER dijalankan setelah operasi tersebut. Kedua trigger ini terkait dengan perubahan yang sama pada tabel, dan perubahan yang terjadi di satu trigger dapat memengaruhi eksekusi trigger yang lain. Jadi, masalah mungkin terjadi saat membuat trigger BEFORE dan AFTER pada tabel yang sama karena mereka berbagi konteks yang sama dan dapat mempengaruhi satu sama lain. Ini dapat menciptakan konflik atau hasil yang tidak diinginkan jika tidak dikelola dengan hati-hati.
Komentar
Posting Komentar