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.
CREATE TRIGGER trigger_adi
ON tablo_adi
[AFTER | INSTEAD OF | BEFORE] [INSERT, UPDATE, DELETE]
AS
BEGIN
-- Trigger'da çalışacak SQL komutları
END
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.
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.
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.
Çemişgezek Rehberi Veri Silme Talebi Son güncelleme: 20 Temmuz 2026 Çemişgezek Rehberi, Emre Esen tarafından…
Market alışverişinizi planlarken aklınıza ilk gelen sorulardan biri mutlaka “carrefoursa kaçta açılıyor” oluyor. Bu yazıda,…
Spasmomen nedir sorusunu özellikle tekrarlayan bağırsak spazmları, kramp tarzı karın ağrıları yaşayanlar sıkça soruyor. Bu…
Uzun süredir üzerinde çalıştığım Android mobil uygulamam Dolap Hafızası, artık Google Play’de yayında. Bu proje…
ÇEMİŞGEZEK REHBERİ GİZLİLİK POLİTİKASI Son güncelleme: 20 Temmuz 2026 1. KAPSAM Çemişgezek Rehberi, Emre Esen…
Dolap Hafizasi - Gizlilik Politikasi Yururluk tarihi: 9 Haziran 2026 Bu Gizlilik Politikasi, Dolap…