SQL’de Tetikleyiciler (Triggers) Nedir ?
Tetikleyiciler (Triggers) depolama prosedürleri’ler ile hemen hemen aynı işlevlere sahip olan, SQL programlama dilinin yeni yapılandırılması için karıştırılan sistemlerden biridir. Bu yazıda, SQL programlama dilinde Trigger (Tetikleyici) yapısı ne olduğu, bölümüde bölünmüş, yeni bir tetikleyici oluşturma, güncelleme, silme gibi işlemleri uygulamalı olarak satışa sunmaktır

Tetikleyici (Trigger) yapısı, ilişkisel veri tabanı yönetim sistemlerinde, bir tabloda belirli olayların meydana gelmesi veya gelmeden önce otomatik olarak çalışan özel bir depolama prosedürü türüdür. Bir tabloda ekleme, güncelleme ve silme değişikliklerinin birinde veya gerçekleşmesinden önce, aynı tabloda veya başka bir tabloda görünen gösterinin görünümlerinde, tetikleyicide kullanılabilirsiniz. Örnek verecek olursa, satış tablosunda satış işleminde ürün stok miktarının eksiltilmesi, banka hesabında işlemin gerçekleşmesinden sonra otomatik olarak e-posta ile gönderilmesi gibi örnekler verilebilir
DML (Veri İşleme Dili) Tetikleyicileri:INSERT, UPDATE ve DELETE gibi veri okuma ve işleme için kullanılan DML ifadeleridir. DML tetikleyicileri, INSERT, UPDATE ve DELETE olaylarındaki veriler her değiştirildiğinde tetiklenir. DML tetikleyicileri iki tip olarak sınıflandırılır
DDL (Veri Tanımlama Dili) Tetikleyicileri:CREATE, ALTER, DROP gibi veri tabanı ve tablo ile ilgili işlemler DDL ifadeleridir. DDL tetikleyicisinin amacı, bir DDL nesnesi oluşturmayı (oluşturmayı), değiştirmeye (değiştirmeye) veya düşürmeye (bırakmaya) çalışanın kısıtlamasını sağlamasını sağlar. CREATE, ALTER ve DROP ifadeleri devreye giren tetikleyici türüdür
Oturum Açma Tetikleyicileri:Oturum açma tetikleyicisi, SQL Server sunucusuna gösterilen bir aralığın belirli aralıklarını uygulayabiliriz. Oturum açma tetikleyicileri, SQL Server’da güvenlik ve kontrol amaçlı kullanılmaktadır. Örneğin kullanıcı veri tabanına dışarıdan bilinmeyen bir bilgisayarın bağlanmasını engelleyip, yalnızca şirket bilgisayarından açılmasına izin verilebilir
Bu tetikleyici durumu ait uygulamalı örnekler MSSQL Server ortamında NORTHWIND veri tabanı kullanılarak gerçekleştirilmektedir
Tetikleyici Oluşturma
Yeni bir Tetikleyici oluşturur; CREATE TRIGGER kesme ve Trigger adı açılır, ardından AFTER veya INSTEAD OF ifadeleri kullanılarak tetikleyicinin ne zaman çalışılacağı belirlenir. Daha sonra AS ifadesiyle sorguya devam edin, BEGIN ve END ifadeleri arasında tetikleciyle ilgili yapılmak istenen sorgular alınır. Böylece [Sipariş Detayları] tabloya yeni bir sipariş (INSERT) işlemi yapılabilir, [Ürünler] tabloda sipariş adeti (miktar) kadar UnitInStock miktarı eksiltilir. Sonuç olarak, Update_StockQuantity’nin işleyişinde tetikleyici, yeni siparişin ardından otomatik olarak çalıştırılır
Tetikleyici Güncelleme
Tetikleyici yapı güncelleme işleminin yapısında, ALTER ifadesi kullanılır. ALTER ifadesinden sonra güncellenecek olan Tetikleyici adı ve güncelleme sorgusu devam eder. Böylece ilk çalıştırma tetikleyicide [Ürünler] tablosundan ürün önceki ve sonraki stok miktarı listelenirken, güncellenen tetikleyicide ise [Ürünler] tablosundan sadece eksiltme işlemi yapılır
Tetikleyici Etkinleştirme ve Devre Dışı Bırakma
Çalışmamızı istemediğimiz tetikleyici devre dışı bırakma ifadesini kullanarak devre dışı bırakabiliriz. Böylece her ekleme sonrasında otomatik olarak çalışan tetikleyici artık çalışmayacaktır. Yukarıdaki örnekte ise, OBJECT_ID ile tetikleyicinin var olup olmadığı kontrol edilir. Eğer [Update_StockQuantity] isminde tetikleyici veri tabanında mevcutsa, DISABLE ifadesiyle devre dışı bırakılır
Devre dışı bırakılan tetikleyici tekrar işleyişinde, ENABLE ifadesini kullanarak etkinleştirilebilir. Yukarıda yaptığımız gibi OBJECT_ID ile tetikleyicinin mevcut olup olmadığı kontrol edilir. Mevcut silinmediyse, ENBALE ifadesi ile tekrar etkin hale getirilir. Böylece her siparişin eklenmesinden sonra Update_StockQuantity tetikleyicisi, tekrar otomatik olarak çalışmaya başlayacaktır
Kullanılmayan Tetikleyici yapının silinmesi istendiğinde, DROP ifadesi kullanılır. yukarıdaki örnekte OBJECT_ID ile tetikleyicinin mevcut olup olmadığı kontrol edildikten sonra, DROP ifadesi ile tetikleyici silme işlemi devam eder
Tetikleyicimizin düzenlene bilirliğini silmek için şifreleme işlemi uygulanır. Şifrelenen Tetikleyiciler üzerinde artık kendimiz dahi değişiklik yapamayız. Bunun için şifreli tetikleyici oluştururken tetikleyici kodlarının da yedeğini bir yerde saklamamızda değişiklik yapmak için gerekli olabilir. Şifreli Tetikleyici, normal tetikleyici oluşturur gibi Tetikleyici isminden sonra ŞİFRELEME İLE ifadesi eklenerek oluşturulur
