mssql logo

Veritabanı Triggerlar

Merhaba arkadaşlar daha önce procedure ve fonksiyonlara bakmıştık. Bu yazımda ise Triggerlar konusuna bakacağız.

Trigger Nedir?

Trigger’ın Türkçe anlam karşılığı tetikleyici anlamına gelmektedir. Buradan yola çıkarak tablo da oluşan bir değişiklik tetikleyici unsur olmaktadır. Örnek vermek gerekirse personel tablosuna bir personel eklendiğinde 1 rows affected yerine “yeni bir personel eklendi” mesajı verilmelisidir.

Procedure’lerden tek farkı otomatik olarak gerçekleşiyor olmasıdır.

İki türü vardır, birincisi ana sorguyu engellemek, ikincisi ise sorgu ile birlikte çalışması için kullanılır. Bir veritabanı nesnesidir.

Trigger Oluşturma Kalıbı

CREATE TRIGGER trigger_adi

ON tablo_adi

AFTER neyden_sonra –/ INSERT/ UPDATE/ DELETE gibi

AS

BEGIN

— Buraya işlemler gelecek

END

Trigger Örnekleri

Yeni bir personel eklendiğinde “Yeni bir personel eklendi” diye yazan Trigger’ı yazalım üstteki kalıba göre..

CREATE TRIGGER yeniPersonel
ON Personel
AFTER INSERT
AS
BEGIN
  Select ‘Yeni Bir Personel Eklendi’
END

Ekran görüntüsü aşağıdaki gibidir.

sql trigger oluşturma örneği

Bir de yeni personel ekleyerek sonucunu görelim. Ben gerçek veri kullandığımdan soyisimleri gizlemek zorunda kaldım.

sql triggerlar kullanımı örnek ekran görüntüsü

Gördüğünüz gibi herhangi bir tetikleme yapmadım. Trigger INSERT işleminden sonra çalışsın deyip yeni bir kayıt yaptım.

Aynı anda birçok trigger çalışabilir.

Personel Eklendikçe Toplam Personel Sayısını Artıran Trigger

Üstteki Trigger’ın örneğinden küçük bir farkla bu Trigger’ımızı da yazalım. PersonelSayisi diye bir tablomuz ve bu tablomuzda sayac diye bir sütunumuz olsun.

CREATE TRIGGER personelSayisiGuncelle
ON PersonelSayisi –Tablo Adı
AFTER INSERT –Insert İşleminden Sonra
AS
BEGIN
  Update PersonelSayisi Set sayac = sayac + 1 –Yapılacak işlem
END

Öğrenci Silindikten Sonra Öğrenci Silindi Mesajı Veren Trigger

Yine aynı şekilde genel kalıbımızda boşlukları dolduruyoruz.

CREATE TRIGGER silmeBilgisi
ON Ogrenci
AFTER DELETE
AS
BEGIN
  SELECT ‘Öğrenci Silindi’
END

Üst Üste İşlemleri Engelleyen Trigger

Örnek olarak bir silme işlemi için gün içinde 10 defa silme hakkı verilsin. Kullanıcı 11.silim işlemini yapmak istediğinde ekrana silme hakkınız bitti diye uyarı mesajı verelim. Bu trigger örneğinde ürünleri kullanalım.

CREATE TRIGGER silmeKontrol
ON urunler –tablo adi
AFTER DELETE –silme işlemi
AS
BEGIN
  DECLARE @sayi int
  SELECT @sayi = Sayac From Sayac –Sayac tablosunda Sayacımız olsun
  IF @sayi > 0
    BEGIN
    SELECT ‘Ürün Silindi’
    UPDATE Sayac SET Sayac = Sayac – 1
  END
  IF @sayi <=0
    BEGIN
    SELECT ‘Silme İşlemi Başarısız Maksimum 10 defa silme hakkınız bitmiştir.’
  END
END

[the_ad id=”1292″]

INSTEAD OF TRIGGER

Yukarıda nedir kısmında açıkladığım iki tür vardı. Yukarıda verdiğim örnekler bir işlemden sonra olan yani After Trıgger örnekleriydi. Şimfi Instead Of’a bakalım.

Sadece basit bir örnek verecem. Sorgu çalışıp çalışmadığı gibi durumlarda kullanılırlar. Bizde ekleme işleminden sonra bir test Trigger’ı yazalım.

CREATE TRIGGER ınsteadDeneme
ON ogrenci
INSTEAD OF INSERT
AS
BEGIN
  SELECT ‘Ekleme işlemi testidir. Ekleme işlemi başarı ile çalışmaktadır’
END

Yukarıdaki Instead Of Triggerlar silinmediği sürece kayıtlar tabloya eklenmez. Update ve Delete işlemleri içinde aynısı geçerlidir.

Triggerlar konusu bu kadar, umarım anlaşılır olmuştur.

Bir cevap yazın