
Triggerdan bahsetmeden önce yazılım geliştirmede karşılaştığımız bir örnekle başlamak istiyorum yazıya. Oluşturduğumuz bir websitesine veya app üzerine butonlar yerleştiririz ve bunlara belli eventler vererek işlevsellik kazandırırız. Mesela buton click özelliği buna örnek verilebilir. Buton click özelliği ile birlikte arkaplanda kod bloğu ile istediğimiz işlemleri gerçekleştirebiliriz, tetikleyebiliriz. İşte trigger özelliğini tam olarak buna benzetebiliriz. Belirli bir olay(event) sonucu arkaplanda tetiklenmesini istediğimiz kod bloğu veya yapısı denebilir. Triggerları otomatik olarak yürütülen özel procedure’ler olarakta tanımlayabiliriz.
DML (Data Manipulation Language) Triggers
Tablolarda yapılan Insert,Update ve Delete işlemlerine karşı otomatik olarak çağrılan tetikleyicilerdir. Bu tetikleyiciler 3’e ayrılır;
— After/For Trigger : Tetiklenmesi ismindende görüleceği gibi DML işlemlerinden sonra gerçekleşir.
— Instead Of Trigger : Belirtilen DML işlemi yerine içerisinde bulunan kod bloğundaki işlemleri gerçekleştirir.
- DDL (Data Definition Language) Triggers
Veritabanında bulunan Create, Alter ve Drop işlemlerine karşı otomatik tetiklenirler.
— Logon Triggers : Oturum açma işlemi düzgün gerçekleştiği durumda kullanılır.
SQL Trigger oluşturma yapısı genel olarak aşağıdaki gibidir;

İlk olarak Create Trigger ile trigger oluşturulur. Daha sonra üzerinde işlem yapacağımız tablo adı belirtilir ve daha sonra hangi işlemden sonra kodların aktif olacağı söylenir. Bununla birlikte kodlar as’den sonra yazılır ve işlem tamamlanır.

Yukarıda Employees tablosundan bir veri silindiğinde bunun yerine LogTablosu tablosuna insert ile bilgilendirme ekledik. Delete işlemi burada gerçekleşmemiş oldu bunun yerine as içerisindeki kod bloğu gerçekleşti. Bunu update ve insert içinde yapabiliriz.
Instead of trigger için örnek verecek olursam Employees tablomuza bir update işlemi uygulanmak istenirse bunun yerine kod as içerisinde bulunan kod bloğunu çalıştıralım.

Eğer DDL Trigger için örnek verecek olursam, mesela database içerisinden herhangi bir tablonun silinmesini istemiyorsak drop işlemini önlememiz gerekiyor. Bunu da şu şekilde gerçekleştirebiliriz.
