SQL Server

SQL Trigger (Tetikleyici) Nedir? Trigger Örnekleri

Bu yazıda Sql Trigger Kavramının ne olduğu, Trigger Kullanımı ve 10 adet Trigger örneği göreceksiniz.

Trigger Türkçe anlamı olarak Tetikleyici demektir.  Trigger, Stored Procedureler gibi  Sql Server içinde bileşen olarak bulunmaktadır. Triggerların kullanım amacı, tablo üzerinde bir işlem gerçekleştiğinde (insert, update, delete) başka bir işlem daha yapılmak istendiği zaman kullanılır.

Şu şekilde basit olarak örneklendirelim.

Öğrenci tablonuz olduğunu düşünelim. Öğrenci tablonuzda bir öğrenciyi sildiğinizde bu öğrenci bilgilerini daha farklı bir tabloda(silinen öğrencilerin tutulduğu) tutmak istiyorsunuz. Öğrenci tablosundaki bir kayıt silindiğinde(delete) başka bir tabloya bu kaydı trigger ile aktarmak mümkün.

Yada daha kapsamlı başka bir örnek Bir kütüphane tablosu üzeride, bir öğrenci sadece bir kitap alabilir durumda olsun. Öğrenci kitabı getirmediği sürece ikinci bir kitap almasına izin verilmesin. Bu işlemi görsel program aracılığı ile yapabileceğiniz gibi trigger ile öğrenci kitap teslim etmediyse ikinci bir kitabı almasına izin verilmesini engelleyebilirsiniz. Yazının sonunda çok daha fazla senaryo ile örneklendirme yapacağım.

Trigger’lar DML (Delete, Insert ve Update işlemleri) işlemleri üzerinde çalışırlar. Select ile bir bağlantısı yoktur.  DML işlemi gerçekleştiğinde deleted, inserted yada her iki sanal tablolaya kayıtlar eklenir. Trigger tetiklenerek, trigger içindeki sorgular gerçekleştirilir. Sonra da kayıtlar gerçek tabloya(rollback ile sorguyu iptal edebiliriz)  eklenerek sorgu işlemi bitirilir.

Adım adım trigger oluşturma kavramına bir bakalım.

Trigger Nasıl Oluşturulur?

trigger_adi: oluşturacağımız trigger adını veriyoruz.

tablo_adi: hangi tabloda çalışacağını belirtiyoruz

After yada Instead of: after yapılırsa işlem yapıldıktan sonra, instead of yapıldığında yapmak istediğimiz işlemin yerine çalıştırılacağını belirtiyoruz

Insert,Update, Delete: Tabloda hangi sql işlemi sırasında çalıştırılacağını belirtiyoruz.

Begin…..End: Trigger çalıştırıldıktan sonra yürütülecek olan sql cümlelerini bu aralıkta yazıyoruz.

 

Trigger Güncelleme 

Trigger Inserted / Deleted Kavramları

Trigger’ın çalışmasına göre, hangi tablo üzerinde etkinse tablo üzerine eklenilen veya güncellenilen kayıtları “inserted” üzerinde, silinen kayıtları ise “deleted” üzerinde kaydediyor. Bunlar sanal tablolardır (virtual table).
Insert: Bir insert işlemi gerçekleştirdiğimizde, eklediğimiz kayıt ilk olarak insertedtablosuna eklenir.

Delete:Bir delete işlemi gerçekleştirdiğimizde sildiğimiz kayıt ilk olarak deletedtablosuna eklenir.

Update:Update işleminde ise eski kayıt önce deleted tablosuna, güncellenen(yeni) kayıt ise inserted tablosuna eklenir.

 

Trigger enable/disable yapma

Enable (Aktifleştirme):

Disable (Pasifleştirme):

Tüm Triggerları Pasifleştirme / Aktifleştirme

Trigger Silme

Oluşturulan bir trigger’ ı silmek için aşağıdaki komut satırı kullanılır.

After /Instead Of Kavramı

After Triggerler: Insert,Update yada Delete işlemi gerçekleştirildiğinde tetiklenir. Sadece tablolar için tanımlanabilir.

Instead Of Triggerler: Belirlenen işlem gerçekleşirken devreye girip, SQL sorgusu yerine çalıştırılır.  After tetikleyicileri sadece tablolar için tanımlanabilirken Instead Of tetikleyicileri hem tablolar için hem de view tabloları ile de kullanılabilir.

 

Rollback  Transaction ve Raise Error

Rollback Transaction komutu trigger ne için tanımlanmışsa o işlemi iptal etmek için kullanılır.

Raise Error komutu kullanıcıya işlemin neden iptal edildiğini bildirmek için kullanılır. Kullanıcıyı bilgilendirme amacı ile kullanılır.

 

Sql Server Management Studio Trigger Nerede Bulunur?

Sql Server Management Studio üzerinde triggerlar aşağıdaki resimde görüntülendiği gibi ilgili tabloya tıklandığında tablonun altında görünecektir.

 

 

Aşağıdaki Komutlar Trigger İçinde Kullanılmaz

Alter Database          Create Database

Load Database          Drop Database

Disk Init                     Disk Resize

Load Log                   Reconfigure

Restore Database     Restore Log

 

Recursive Trigger Oluşturma

Trigger’ın kendini çağırması durumudur.

Triggerda aynı tabloda işlem yapılıyorsa o işlem sonucu aynı trigger bir daha çalışabilir.

Trigger başka tabloda işlem yapar. O işlem sonucu çalışan başka bir triggerda yeniden birinci tablo ile ilgili işlem yapar. Bu durum da da recursive olur.

En fazla 32 tane çalışır.

Sürekli bir şart ile kontrol edilip sonlandırılmalıdır. Yoksa sonsuz döngüye girer.

 

Recursive trigger’ları aktif yapmak için yukarıdaki kodlar kullanılır.

Bir alanının güncellendiğini öğrenmek için update(alanadi) fonksiyonu kullanılır. Sonucu true yada false olarak döner.

Bir trigger başka bir tabloda işlem yaparken o tablodaki trigger’ı da çalıştırabilir.

İç içe 32 trigger çalıştırılabilir.

@@Nestlevel hangi seviyede olduğunu belirtir.

Sp_configure procedure’ü kullanılarak iç içe tetiklenme kapatılabilir.

İlk trigger çalışır diğerleri tetiklenmez.

 

Trigger Örnekleri

Trigger örneklerini basit olarak oluşturulmuş kütüphane veritabanı üzerinde uygulayacağım. Kütüphane veritabanını indirmek için tıklayın.

Aşağıdaki örneklerde triggerlar bir kez execute ile yürütüldükten sonra insert/update/delete işlemleri gerçekleştirildiğinde ilgili trigger tetiklenecektir.

Bazı örneklerde triggerlar bir birlerini etkileyeceği için ya triggerı kaldırmanız yada bir birini etkileyeceğini düşündüğünüz triggerları durdurmanız gerekir.

Örnek 1: Kullanıcı bir kayıt ekledikten sonra ogrenci tablosunu listeleyen trigger oluşturunuz.

 

Örnek 2: 10A sınıfına cinsiyeti kız olan öğrenciler kaydedilebilsin.

 

Örnek 3: 10A’nın kız öğrencileri silinemesin.

 

Örnek 4: Silinen öğrenciler mezun tablosuna kaydedilsin.

Örnek 5: Öğrencilerin cinsiyet alanı güncellenmesin.

 

Örnek 6: Kitap tablosu güncellenirken eski sayfa sayısı yeni sayfa sayısından fazla olmak zorunda olsun.

 

Örnek 7 : Tür tablosundan hiçbir kayıt silinmesin.

After yerine Instead of kullanılarak delete işlemi yapmak yerine hata vermesi sağlanabilir.

 

Örnek 8:  ogrenci tablosuna silindi isminde bir alan ekleyiniz.  Öğrenci silinmesin silindi alanının değeri 1 olsun.  after yerine –instead of kullanılacak.

Örnek 9: Tur tablosuna gTarih adında bi alan ekleyin tur tablosunda guncelleme yapıldığında gtarih alanına güncelleme tarihini kaydediniz.

 

Örnek 10: 500 sayfadan daha az roman türünde kitap eklenemesin.

 

3 Yorum

Yorum yap

Web Tasarım & Programlama sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya Devam Edin