YÜKLENİYOR...

Trigger Nedir? MSSQL'de Ne Amaçla Kullanılır?

Trigger Nedir? MSSQL'de Ne Amaçla Kullanılır?
Veritabanı üzerinde yapılan işlemleri kontrol altına almak, loglamak ya da otomatik süreçler başlatmak veri bütünlüğü açısından oldukça önemlidir. Özellikle kurumsal projelerde, veri üzerinde herhangi bir değişiklik olduğunda bir aksiyon almak gerekebilir

Veritabanı üzerinde yapılan işlemleri kontrol altına almak, loglamak ya da otomatik süreçler başlatmak veri bütünlüğü açısından oldukça önemlidir. Özellikle kurumsal projelerde, veri üzerinde herhangi bir değişiklik olduğunda bir aksiyon almak gerekebilir. Bu gibi durumlarda SQL Server’da Trigger (tetikleyici) adı verilen yapılar devreye girer.

Trigger’lar, veritabanı tabloları üzerinde INSERT, UPDATE veya DELETE gibi işlemler gerçekleştiğinde otomatik olarak devreye giren özel SQL kod bloklarıdır. Bu yazıda, Trigger nedir, ne zaman kullanılır ve nasıl yazılır gibi temel konulara değineceğiz.


Trigger Nedir?

Trigger, belirli bir olay meydana geldiğinde (örneğin bir tabloya veri eklendiğinde) otomatik olarak çalışan bir tür veritabanı prosedürüdür. Trigger'lar manuel olarak çağrılmaz; ilgili işlem yapıldığında tetiklenir.

Trigger’lar genellikle şu amaçlarla kullanılır:

  • Veri değişikliklerini loglamak

  • Koşullu işlemleri otomatik yürütmek

  • Diğer tablolarla senkronize işlem yapmak

  • Güvenlik ve kısıt kontrolü sağlamak


Temel Trigger Türleri

MSSQL’de 3 ana trigger türü vardır:

  1. AFTER Trigger

    • İşlem gerçekleştikten sonra çalışır. (En yaygın tür)

  2. INSTEAD OF Trigger

    • Orijinal işlemi engelleyip yerine geçer.

  3. DDL Trigger

    • CREATE, DROP gibi yapısal değişiklikleri izler (genellikle güvenlik amaçlıdır).


Basit Bir AFTER INSERT Trigger Örneği

Diyelim ki bir Kullanici tablosuna her yeni kayıt eklendiğinde bu bilgiyi bir log tablosuna kaydetmek istiyoruz.

1. Log Tablosunu Oluşturalım

CREATE TABLE KullaniciLog (
    LogId INT IDENTITY(1,1) PRIMARY KEY,
    KullaniciAdi NVARCHAR(100),
    KayitTarihi DATETIME
);

2. Trigger Oluşturma

CREATE TRIGGER trg_Kullanici_Insert
ON Kullanici
AFTER INSERT
AS
BEGIN
    INSERT INTO KullaniciLog (KullaniciAdi, KayitTarihi)
    SELECT KullaniciAdi, GETDATE()
    FROM INSERTED;
END;

INSERTED sanal tablosu, tetikleme anında eklenen verileri temsil eder. Böylece ilgili bilgiler başka bir tabloya yazılır.


UPDATE ve DELETE İçin Trigger Örneği

CREATE TRIGGER trg_Kullanici_Update
ON Kullanici
AFTER UPDATE
AS
BEGIN
    INSERT INTO KullaniciLog (KullaniciAdi, KayitTarihi)
    SELECT KullaniciAdi, GETDATE()
    FROM INSERTED;
END;

Benzer şekilde DELETED sanal tablosu da, silinen kayıtlar için kullanılır.


Trigger Kullanımında Dikkat Edilmesi Gerekenler

  • Performans: Trigger’lar otomatik çalıştığı için dikkatli kullanılmalıdır. Yoğun veritabanlarında tetikleme zinciri performans sorunlarına neden olabilir.

  • İç içe trigger (nested): Trigger içinde başka bir işlem tetiklenirse, zincirleme işlemler kontrolsüz hâle gelebilir.

  • Debug zorluğu: Trigger'lar arka planda çalıştığı için hata ayıklama klasik SQL sorgularına göre daha zordur.

  • Aşırı kullanım: Her işlem için trigger tanımlamak yerine, kritik işlemler için kullanılmalıdır.


Gerçek Hayatta Kullanım Alanları

  • Erişim loglama – Kim ne zaman ne ekledi?

  • Veri kontrolü – Örneğin maaş güncellendiğinde eski değer saklansın

  • E-posta tetikleme – Yeni kayıt geldiğinde bildirim gönderilsin

  • Audit trail – Tüm değişikliklerin kayıt altına alınması

 

Trigger'lar, veritabanı işlemlerine otomatik yanıt vermek için güçlü bir araçtır. Doğru kullanıldığında veri güvenliğini artırır, sistemsel iş yükünü azaltır ve uygulama dışı işlemleri otomatikleştirir. Özellikle loglama, denetim ve kısıtlama gerektiren sistemlerde Trigger kullanımı hem faydalı hem de gereklidir.

Ancak karmaşık sistemlerde tetiklenen işlemleri dikkatle planlamak gerekir. Her tetikleyici, potansiyel olarak sistemi yavaşlatabilir veya beklenmedik sonuçlara yol açabilir.