Categories: Yazılım

SQL Trigger Nedir?

SQL Trigger Nedir?

Veritabanlarında otomatik işlem yapmayı düşündünüz mü? SQL Trigger’lar, tam da bu noktada işinizi kolaylaştıracak güçlü bir araçtır. Bu yazıda, SQL Trigger kavramını detaylıca öğrenip, örneklerle kullanımını göreceksiniz.

SQL Trigger, bir veritabanı tablosunda belirli bir olay meydana geldiğinde (örneğin, INSERT, UPDATE veya DELETE işlemleri) otomatik olarak çalışan özel bir SQL komutudur. Trigger’lar, veri bütünlüğünü sağlamak, log tutmak, işlemleri otomatikleştirmek gibi işlemler için kullanılır.

Trigger Türleri

  • AFTER Trigger:
    • Belirtilen olay gerçekleştikten sonra tetiklenir.
    • Genelde veritabanı bütünlüğü sağlamak veya log tutmak için kullanılır.
  • INSTEAD OF Trigger:
    • Belirtilen olayın yerine geçer.
    • Özellikle VIEW’ler üzerinde kullanılabilir.
  • BEFORE Trigger:
    • Belirtilen olay gerçekleşmeden önce tetiklenir.
    • Veri doğrulama veya değiştirme işlemleri için uygundur.

Trigger Yapısı

CREATE TRIGGER trigger_adi
ON tablo_adi
[AFTER | INSTEAD OF | BEFORE] [INSERT, UPDATE, DELETE]
AS
BEGIN
    -- Trigger'da çalışacak SQL komutları
END

Örnekler

1. AFTER INSERT Trigger

Bu örnekte, bir tabloya yeni bir kayıt eklendiğinde başka bir tabloya log kaydı eklenir.

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name NVARCHAR(50),
    Department NVARCHAR(50)
);

CREATE TABLE EmployeeLogs (
    LogID INT IDENTITY(1,1) PRIMARY KEY,
    LogMessage NVARCHAR(255),
    LogDate DATETIME
);

CREATE TRIGGER trg_AfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
    DECLARE @Name NVARCHAR(50), @Department NVARCHAR(50);
    SELECT @Name = Name, @Department = Department FROM INSERTED;

    INSERT INTO EmployeeLogs (LogMessage, LogDate)
    VALUES ('Yeni çalışan eklendi: ' + @Name + ', Departman: ' + @Department, GETDATE());
END;

Kullanımı:

INSERT INTO Employees (EmployeeID, Name, Department)
VALUES (1, 'Ali Yılmaz', 'IT');

Sonuç: EmployeeLogs tablosuna log kaydı eklenir.

2. AFTER UPDATE Trigger

Bu örnekte, bir çalışanın departmanı değiştirildiğinde log tutulur.

CREATE TRIGGER trg_AfterUpdate
ON Employees
AFTER UPDATE
AS
BEGIN
    DECLARE @OldDept NVARCHAR(50), @NewDept NVARCHAR(50), @Name NVARCHAR(50);
    SELECT @OldDept = DELETED.Department, @NewDept = INSERTED.Department, @Name = INSERTED.Name 
    FROM INSERTED INNER JOIN DELETED ON INSERTED.EmployeeID = DELETED.EmployeeID;

    IF @OldDept <> @NewDept
    BEGIN
        INSERT INTO EmployeeLogs (LogMessage, LogDate)
        VALUES ('Çalışanın departmanı değiştirildi: ' + @Name + ', Eski Departman: ' + @OldDept + ', Yeni Departman: ' + @NewDept, GETDATE());
    END;
END;

Kullanımı:

UPDATE Employees
SET Department = 'HR'
WHERE EmployeeID = 1;

Sonuç: Departman değişikliği loglanır.

3. INSTEAD OF DELETE Trigger

Bir kaydı silmek yerine, “soft delete” mantığı uygulanır (örneğin, kaydın IsDeleted alanı true yapılır).

ALTER TABLE Employees ADD IsDeleted BIT DEFAULT 0;

CREATE TRIGGER trg_InsteadOfDelete
ON Employees
INSTEAD OF DELETE
AS
BEGIN
    UPDATE Employees
    SET IsDeleted = 1
    WHERE EmployeeID IN (SELECT EmployeeID FROM DELETED);
END;

Kullanımı:

DELETE FROM Employees
WHERE EmployeeID = 1;

Sonuç: Kayıt tamamen silinmez, IsDeleted alanı 1 olur.


Trigger Kullanımında Dikkat Edilmesi Gerekenler

  1. Performans: Trigger’lar her işlemde çalışacağı için doğru tasarlanmalıdır. Karmaşık işlemler performans sorunlarına yol açabilir.
  2. Recursive Tetiklenme: Bir trigger başka bir trigger’ı tetikleyebilir. Bu, dikkat edilmezse sonsuz döngüye neden olabilir.
  3. Denetim: Karmaşık trigger’ları izlemek zor olabilir, bu yüzden iyi bir yorum ve dokümantasyon yapılmalıdır.
admin

Recent Posts

Gülcan’ın Mutfağı – Profesyonel Catering ve Toplu Yemek Hizmeti

Gulcaninmufftagi.com, toplu yemek üretimi ve catering hizmetlerinde lezzeti, hijyeni ve güveni bir araya getiren profesyonel…

1 ay ago

Demakoto.com – BMW ve Mercedes Yedek Parçada Güvenilir Marka, Öde İş Birliğiyle Daha Güçlü

BMW ve Mercedes yedek parça sektöründe güvenilir hizmet anlayışıyla öne çıkan Demakoto.com, kullanıcı deneyimini geliştirmek…

1 ay ago

SQL Server 2025 Çıktı! İşte Yapay Zeka ile Gelen Dev Yenilikler

SQL Server 2025 Çıktı! İşte Yapay Zeka ile Gelen Dev Yenilikler 🤖 Microsoft Ignite 2024…

1 ay ago

Microsoft SQL Server (MSSQL) Tam Rehber: Nedir, Nasıl Kurulur? 🚀

Veritabanı dünyasına ilk adım attığınızda mutlaka duyacağınız bir isim var: Microsoft SQL Server! Eğer ekranınızda…

1 ay ago

Miyavoloji 101: Kedi Dili ve Edebiyatına Giriş

Meowhabalar Herkese! Başlarda nasıl bir giriş cümlesi ile başlayacağımı bilemedim. Açıkçası bu yazıyı da değerli…

2 ay ago

Diyarbakır Araç Kiralama – qcar.com.tr

Diyarbakır araç kiralama hizmetleri, şehri keşfetmek isteyenler için birçok avantaj sunuyor. Diyarbakır'ın tarihi ve kültürel…

3 ay ago