Alper ÖNER - Blog

MsSQL-Triggers(Tetikleyiciler)

2020-08-01 15:50:28444 okunma
Trigger Nedir? Nasıl Kullanılır? Niçin Kullanılır?


SQL Kodları -> Github : Sayfaya gitmek için tıklayınız...
Trigger Türkçe anlamı olarak Tetikleyici demektir. Trigger,Stored Procedureler gibi Sql Server içinde bileşen olarak bulunmaktadır.(Ayrı klasörde tanımlanı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.(Başka tabloya veri ekleme,silme güncelleme gibi)

Trigger Ne Zaman Kullanılır?


  • Değişiklikleri takip etmek(tablolara ekleme,çıkarma,silme)
  • Birincil anahtar üretmek,
  • Karmaşık iş kurallarını gerçekleştirmek,
  • E-posta atmak gibi olayları otomatik olarak yapmak,
  • Standart hata mesajlarının dışında bir hata mesajı elde etmek,
  • Veritabanı erişimlerini takip edebilmek,
  • Nesnede meydana gelebilecek değişiklikleri takip ve engellemektir.
Ş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.
Peki arabalarda olan trigger kayışı ? 259054040321931.jpg image
Motordaki dönen tüm parçaların belirli bir doğrultuda dönmesini sağlayan dişli bir kayıştır.

Nasıl Yapıyor ?


1-)Trigger’lar DML (Delete, Insert ve Update işlemleri) işlemleri üzerinde çalışırlar. Select ile bir bağlantısı yoktur.
2-)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.

293653760733189.JPG image
398473394747347.png image
441494799843633.JPG image
298453024231244.JPG image
496071656132262.JPG image
Silmek veya ismini değiştirmek
490793512525364.JPG image
450063771222097.JPG image
Önemli Not 1 :
Triggerlar
Çıktı
truncate table 
komutunu görmezler bir tabloya truncate dedigimiz zaman buna baglı olan hic bir trigger bu işlemi farketmez . bunu nedeni truncate tablo log dosyasına herhangi bir iz bırakmamasındandır ki triggerlar log yani ldf adını verdigimiz dosyadan faydalanırlar...
Önemli Not 2 :
Triggerlar içerisinde select cumlelerimizde hic bir seyi ifade etmez... bize result dondurmezler...

Temel olarak iki farklı trigger çeşitimiz vardır After ( for ) ve instead of

After ( for ) : sadece tablolar uzerinde tanımlanabilirler . for trigger ve after trigger aynıdır sadece sql server’ın eski sürümlerinin uyumlulugu icin kullanılır.
Instead of (kontrol) : triggerlar ise hem tablolar hem viewlar uzerinde tanımlanabilirler. Instead of türü triggerları gercek tablo degisikliklerinden etkilenmeden hemen önce devreye girerler. After trigger ile instead of trigger arasındaki en büyük fark after trigger olayın olusunu kabul eder ve kendini trigger’a bırakır.Instead of triggerlar ise istenilen işlemi gercekleştirmez.sadece bahsettigimiz sözde tablolara inserted ve deleted kaydetmekle yetinirler.

Trigger Türleri

2 şekilde çalışır.
After Trigger: çalıştırılan SQL kodu ile beraberinde çalışabilir. (for/after) yani bir tablo oldu ve bu kaydı başka bir tabloya raporlama amacıyla ekleyebilir.
Instead Of Trigger: Esas sorguya engel olabilir. Yani bir kaydın silinmesini istemiyorsak, bu durumda instead of triggerını kullanabiliyoruz.
121292424611888.JPG image

Inserted / Deleted


Trigger geçerli 2 tane tablo vardır.
Insert anında eklenen veriyi tespit etmek için inserted denen tablodan faydalanıyoruz.
Delete eylemi gönderildiyse, hangi veriyi silmeye çalışıyorsunuz bunun verisini getiriyor.
Update anında ise her iki tablodan da gelir, yeni eklenen veri inserted’dan,eski veri deleted’dan gelir.Güncellenmeden önce ki hali deleted’da güncellendikten sonra ki hali inserted’da gelir.
Trigger 3 durum için çalışır.
* Insert : Bir insert işlemi gerçekleştirdiğimizde, eklediğimiz kayıt ilk olarak inserted tablosuna eklenir.
* Delete: Bir delete işlemi gerçekleştirdiğimizde sildiğimiz kayıt ilk olarak deleted tablosuna eklenir.
* Update: Update işleminde ise eski kayıt önce deleted tablosuna, güncellenen(yeni) kayıt ise inserted tablosuna eklenir.

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.
Kaynaklar
http://www.yazilimgunlugu.com/trigger-nedir-makalesi/809.aspx
https://osmankahya.net/sql/100-sql-trigger.html
https://www.yazilimbilisim.net/veritabani/mssql/sql-serverda-trigger-kullanimi/
https://www.yazilimkodlama.com/sql-server-2/sql-server-trigger-kullanimi-ornegi-urun-satis/
http://www.cihanozhan.com/sql-server-triggerlar/
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql?view=sql-server-2017
http://www.caglarozenc.com/ms-sql-server/tetikleyiciler-trigger-nedirnasil-kullanilir.html
"

Yorumlar
Yorum yapabilirsiniz.
Onaylandıktan sonra yorumlarınız paylaşılacaktır.