Ana içeriğe atla

SQL Tetikleyicileri: Geliştiriciler için Bir Kılavuz

SQL tetikleyicilerini kullanarak görevleri otomatikleştirmeyi, veri bütünlüğünü korumayı ve veritabanı performansını artırmayı öğrenin. MySQL ve Oracle'da CREATE, ALTER ve DROP komutları gibi pratik örnekleri deneyin.
Güncel 22 Nis 2026  · 13 dk. oku

SQL tetikleyicileri, belirli olaylara yanıt olarak görevleri otomatikleştiren, veritabanı yönetiminde güçlü araçlardır. SQL tetikleyicilerini anlayıp uygulayarak veri bütünlüğünü sağlayabilir, tekrarlayan görevleri otomatikleştirebilir ve genel veritabanı performansını artırabilirsiniz. Bu makale, SQL tetikleyicilerinin temellerini, söz dizimini, türlerini ve bunları etkili biçimde nasıl kullanacağınıza dair pratik örnekleri ele alacaktır.

SQL ve veritabanı yönetimini yapılandırılmış bir öğrenme yoluyla daha derinlemesine öğrenmek için bir sonraki fırsatınıza hazırlanmanızı sağlayacak Associate Data Analyst in SQL kariyer yolumuzu düşünebilirsiniz. Ayrıca bolca uygulamalı alıştırma içeren bir SQL Fundamentals beceri yolumuz da var. Son olarak, hem SQL tetikleyicileri hem de SQL Server ile ilgilendiğinizi fark ederseniz, Building and Optimizing Triggers in SQL Server kursumuz sizin için iyi bir seçenek olacaktır. 

SQL Tetikleyicileri Nedir?

SQL tetikleyicileri, bir veritabanındaki belirli bir tablo veya görünümdeki belirli olaylara yanıt olarak otomatik olarak çalışan saklı yordamlar (stored procedure)dır. Veri bütünlüğünü korumak, iş kurallarını uygulamak ve görevleri otomatikleştirmek için kullanılırlar. Tetikleyicileri bir INSERT, UPDATE veya DELETE işlemi öncesinde (BEFORE) ya da sonrasında (AFTER) tetiklenecek şekilde ayarlayabiliriz. SQL tetikleyicilerini anlayıp uygulamak veritabanı yönetimi becerilerinizi önemli ölçüde geliştirebilir.

SQL tetikleyicilerinin söz dizimi ve yapısı

Bir SQL tetikleyicisinin temel söz dizimi; oluşturma ifadesini, tetikleyiciyi etkinleştiren olayı ve tetikleyicinin eylemlerini tanımlayan SQL ifadelerini içerir. İşte bir tetikleyici oluşturmak için genel bir şablon. Aşağıdaki söz dizimi MySQL ve Oracle gibi birçok yaygın veritabanında çalışacaktır.

CREATE TRIGGER trigger_name
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON table_name
FOR EACH ROW
BEGIN
    -- SQL statements
END;

Örneğin, bu employees tablosundaki değişiklikleri günlüğe kaydetmek istediğiniz bir senaryoyu düşünün. Şu şekilde bir tetikleyici oluşturabilirsiniz:

CREATE TRIGGER log_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'updated');
END;

Bu örnek, employees tablosunda yapılan güncellemeleri, bir güncelleme gerçekleştiğinde eski çalışan verilerini employees_log tablosuna ekleyerek kaydeden bir tetikleyici oluşturur.

SQL tetikleyicileriyle işlemler

SQL tetikleyicileri, veri tutarlılığını korumaya ve süreçleri otomatikleştirmeye yardımcı olan çeşitli işlemlere olanak tanır; tetikleyicileri oluşturma, değiştirme, silme ve görüntüleme temel işlemlerdir. Bu görevleri şöyle gerçekleştirebilirsiniz:

1. Tetikleyici oluşturma

Bir tetikleyici oluşturmak, ne zaman çalışacağını ve hangi eylemleri gerçekleştireceğini tanımlamayı içerir. Yukarıdaki örnek, bir employees tablosundaki güncellemeleri nasıl günlüğe kaydedecek bir tetikleyici yapılacağını gösterir.

CREATE TRIGGER after_employee_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'deleted');
END;

Bu tetikleyici, silinen çalışan kayıtlarının ayrıntılarını employees_log tablosuna kaydeder.

2.  Tetikleyicileri değiştirme ve silme

Bir tetikleyiciyi değiştirmek için mevcut olanı düşürüp (drop) istenen değişikliklerle yenisini oluşturmanız gerekir. Bunu şu şekilde yapabilirsiniz:

DROP TRIGGER IF EXISTS log_changes;
CREATE TRIGGER log_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'updated');
END;

Bir tetikleyiciyi silmek daha kolaydır. Bir tetikleyiciyi düşürmek için aşağıdaki komutu kullanın:

DROP TRIGGER IF EXISTS log_changes;

Bu, tetikleyicinin artık etkin olmamasını ve tanımlı eylemlerini gerçekleştirmemesini sağlar.

3. Mevcut tetikleyicileri görüntüleme

Mevcut tetikleyicileri, kullandığınız SQL veritabanı yönetim sistemine (DBMS) bağlı olarak belirli sorgularla görüntüleyebilirsiniz. Örneğin, MySQL'de:

SHOW TRIGGERS;

Bu sorgu, mevcut veritabanındaki tüm tetikleyicileri listeler ve gerektiğinde bunları gözden geçirip yönetmenize olanak tanır.

SQL tetikleyicilerinin türleri

Birkaç temel SQL tetikleyici türü vardır. Bu türler, yanıt verdikleri belirli olaylara ve gerçekleştirdikleri işlemlere göre gruplandırılır.

  • DML Tetikleyicileri (Data Manipulation Language): DML tetikleyicileri arasında bir işlemden sonra çalışan AFTER tetikleyiciler, bir işlemden önce çalışan BEFORE tetikleyiciler ve işlemi tetikleyicinin koduyla değiştiren INSTEAD OF tetikleyiciler bulunur.
  • DDL Tetikleyicileri (Data Definition Language): DDL tetikleyicileri, CREATE, ALTER ve DROP ifadeleri gibi DDL olaylarına yanıt olarak tetiklenir. Şema değişikliklerini kontrol etmek, veritabanı değişikliklerini denetlemek ve güvenlik ilkelerini uygulamak için kullanışlıdırlar.
  • Oturum Açma (Logon) Tetikleyicileri: Oturum açma tetikleyicileri genellikle bir LOGON olayına yanıt olarak yürütülür. Kullanıcı oturumlarını kontrol etmek veya izlemek, oturum açma ilkelerini uygulamak ya da kullanıcı etkinliğini kaydetmek için kullanılırlar. Örneğin, bir oturum açma tetikleyicisi erişimi belirli saatlerle sınırlayabilir veya her kullanıcının giriş zamanını ve IP adresini kaydedebilir.

SQL Tetikleyicilerine Örnekler

SQL tetikleyicilerinin görevleri nasıl otomatikleştirebileceğine dair bazı pratik örnekleri inceleyelim. Bu örnekler, tetikleyicilerin uygulanmasını ve veritabanınızda kullanımının faydalarını anlamanıza yardımcı olacaktır.

Temel bir tetikleyici oluşturma

Bir employees tablomuz olduğunu ve bu tablodan yapılan silmeleri günlüğe kaydetmek istediğimizi varsayalım. Önce gerekli tabloları oluşturun:

CREATE TABLE employees (
    employee_id INT,
    name VARCHAR(100),
    department VARCHAR(100)
);
CREATE TABLE employees_log (
    employee_id INT,
    name VARCHAR(100),
    action VARCHAR(100)
);
INSERT INTO employees (employee_id, name, department)
VALUES (1, 'Alice', 'HR'), (2, 'Bob', 'IT'), (3, 'Charlie', 'Sales'), (4, 'David', 'IT');

Ardından, silmeleri günlüğe kaydedecek tetikleyiciyi oluşturun:

CREATE TRIGGER after_employee_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'deleted');
END;

Bu tetikleyici, bir çalışan kaydı silindiğinde çalışan ayrıntılarını employees_log tablosuna yazar.

Bir tablodaki değişiklikleri günlüğe kaydetme

Bir tablodaki değişiklikleri günlüğe kaydetmek, denetim ve veri değişikliklerinin geçmişini tutmak için önemlidir. Önceki örneği güncellemeleri de kaydedecek şekilde genişletebiliriz:

CREATE TRIGGER after_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'updated');
END;

Bu tetikleyici, employee tablosundaki tüm güncellemelerin employees_log tablosuna kaydedilmesini sağlar. Bu bilgileri yakalayarak zaman içindeki değişiklikleri izleyebilir ve denetim amaçları için veri değişikliklerinin geçmişini tutabilirsiniz.

İlişkili tabloları otomatik olarak güncelleme

Bu yaklaşım, veri tutarlılığını korumaya ve manuel çabayı azaltmaya yardımcı olur. Örneğin, yeni bir sipariş verildiğinde, müşterinin son sipariş tarihini güncellemek isteyebilirsiniz.

CREATE TRIGGER after_order_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
  UPDATE customers
  SET last_order_date = NOW()
  WHERE id = NEW.customer_id;
END;

Bu tetikleyici, orders tablosuna yeni bir sipariş eklendiğinde customers tablosundaki last_order_date alanını günceller. Bu da müşteri bilgilerinin her zaman güncel olmasını sağlayarak veri doğruluğunu ve tutarlılığını artırır.

Eski (OLD) ve yeni (NEW) tetikleyici değişkenlerini kullanma

PL/SQL'de OLD ve NEW, sırasıyla tetikleme olayından önceki ve sonraki sütun değerlerine atıfta bulunan tetikleyici değişkenleridir. Tetikleyicilerde verilere erişmek ve onları işlemek için bu değişkenlere ihtiyaç duyarız. Örneğin, değişiklikleri izlemek için bu değişkenleri kullanabilirsiniz:

CREATE TRIGGER track_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO change_log (employee_id, old_name, new_name)
    VALUES (OLD.employee_id, OLD.name, NEW.name);
END;

Bu tetikleyici, çalışan kayıtları güncellendiğinde çalışanların eski ve yeni adlarını kaydeder.

İleri Düzey SQL Tetikleyici Fikirleri

Bu bölümde, iç içe (nested) tetikleyiciler, özyinelemeli (recursive) tetikleyiciler ve hata yönetimi gibi bazı tekniklere bakacağız.

İç içe tetikleyiciler ve kullanım alanları

İç içe tetikleyiciler, başka tetikleyicileri tetikleyen tetikleyicilerdir. Örneğin, bir AFTER INSERT tetikleyicisi, bir AFTER UPDATE tetikleyicisinin çalışmasına neden olabilir. Güçlü olmakla birlikte, iç içe tetikleyiciler mantığı karmaşıklaştırabilir ve performans sorunlarından kaçınmak için ölçülü kullanılmalıdır. Birden çok eylemin sıralı olarak gerçekleşmesi gereken karmaşık iş akışlarında faydalıdırlar.

Özyinelemeli tetikleyiciler

Özyinelemeli tetikleyiciler kendilerini doğrudan veya dolaylı olarak çağırır ve bu da sonsuz döngülere yol açabilir. Örneğin, aynı tabloyu güncelleyen bir AFTER UPDATE tetikleyicisi kendisini tekrar tekrar tetikleyebilir. Sonsuz döngüleri önlemek için dikkatle ve uygun koşullarla ele alınmalıdır. Özyinelemeli tetikleyiciler, ilişkili tablolar arasında kademeli (cascading) güncellemeler veya silmeler gibi senaryolarda yardımcı olabilir, ancak bitmeyen yürütmeden kaçınmak için dikkatli tasarım gerektirir.

Tetikleyicilerde hata yönetimi

Tetikleyicilerde hata yönetimi, veri bütünlüğünü korumak ve anlamlı hata mesajları sağlamak için gereklidir. PL/SQL tetikleyicilerinde EXCEPTION bloklarının kullanılması hataları etkili şekilde yönetmeye yardımcı olabilir. Doğru hata yönetimi, tetikleyici yürütmesi sırasında oluşan sorunların yakalanıp uygun biçimde ele alınmasını sağlayarak veri bozulmasını veya yarım kalmış işlemleri önler.

SQL Tetikleyicilerini Kullanma için En İyi Uygulamalar

SQL tetikleyicilerini uygulamak veritabanı yönetimi görevlerinizi önemli ölçüde iyileştirebilir, ancak performansı olumsuz etkilememeleri için en iyi uygulamalara uymak önemlidir. SQL tetikleyicilerini kullanırken göz önünde bulundurmanız gereken bazı en iyi uygulamalar şunlardır:

1. Tetikleyicileri basit ve verimli tutun.

Tetikleyiciler, performans darboğazlarından kaçınmak için görevlerini hızlı ve verimli biçimde yerine getirmelidir. Tetikleyicilerdeki karmaşık mantık veritabanı işlemlerini yavaşlatabilir, bu nedenle mümkün olduğunca basit tutmak en iyisidir. Örneğin, bir tetikleyici içinde kapsamlı hesaplamalar veya büyük veri değişiklikleri yapmaktan kaçının.

2. Tetikleyicileri günlükleme ve denetim için kullanın.

Tetikleyiciler, veri değişikliklerinin kayıtlarını tutmak için mükemmel araçlardır. Değişiklikleri otomatik olarak kaydederek, özellikle mevzuata uyum ve sorun giderme için yararlı olan bir denetim izi oluşturabilirsiniz. Örneğin, hassas bir tablo üzerindeki her güncelleme veya silme işlemini kaydeden bir tetikleyici yapabilirsiniz.

3. Tetikleyicilerde karmaşık iş mantığından kaçının.

İş mantığı hızla karmaşık hale gelebilir ve bunu tetikleyicilerin içine gömmek veritabanınızı yönetmeyi ve anlamayı zorlaştırabilir. Bunun yerine iş mantığınızı uygulama kodunuzda veya saklı yordamlar içinde tutun; tetikleyicileri ise doğrudan, otomatik görevler için kullanın. Bu sorumluluk ayrımı, açıklığı ve yönetilebilirliği korumaya yardımcı olur.

4. Bakımı kolaylaştırmak için tetikleyicileri belgelendirin

Doğru dokümantasyon, özellikle veritabanınız büyüyüp geliştikçe, tetikleyicilerinizi sürdürmek ve anlamak için kritik öneme sahiptir. Her tetikleyicinin ne yaptığını, neden var olduğunu ve uygulamasına ilişkin özel ayrıntıları belgeleyin. Bu uygulama, başkalarının (veya ileride sizin) tetikleyicileri etkili biçimde anlamasını ve bakımını yapmasını sağlar. Tetikleyicilerin performans darboğazlarından kaçınmak için görevlerini hızlı ve verimli biçimde yaptığından emin olun.

5. Artılarını ve eksilerini değerlendirin 

En iyi uygulama olarak, SQL tetikleyicilerini kullanırken belirgin ödünleşimler olduğu için artılarını ve eksilerini tartmalısınız.

Avantajlar 

Dezavantajlar

Otomatik görev yürütme

Olası performans yükü

Gelişmiş veri bütünlüğü

Sorun gidermede karmaşıklık

Hata yönetimi ve günlükleme

Sonsuz döngü oluşturma riski

6. SQL tetikleyicilerine alternatifleri değerlendirin

Tetikleyici kullanımına alternatifler arasında saklı yordamlar, check kısıtları ve yabancı anahtarlar bulunur. Bu alternatifler, tetikleyicilerle aynı hedeflere daha az karmaşıklıkla ulaşabilir. Örneğin, saklı yordamlar eylemleri gerçekleştirmek üzere açıkça çağrılabilirken, check kısıtları ve yabancı anahtarlar ek bir yük oluşturmadan veri bütünlüğünü uygular.

Sonuç

SQL tetikleyicileri, görevleri otomatikleştirdikleri, veri bütünlüğünü sağladıkları ve hata yönetimi ile günlükleme yetenekleri sundukları için veritabanınızın performansını gerçekten artırabilecek son derece yararlı araçlardır. 

SQL tetikleyicilerinde ve diğer ileri düzey SQL tekniklerinde ustalaşmak için Building and Optimizing Triggers in SQL Server kursumuzu öneririm. Tamamladıktan sonra, kendi panolarınızı nasıl oluşturacağınızı öğrenmek için Reporting in SQL kursumuzu keşfetmeyi düşünebilirsiniz. Birlikte, bu kurslar veritabanı yönetiminde başarılı olmanız için harika bir araç seti sunacaktır.


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Yapay zekâ, makine öğrenimi ve veri bilimi alanlarında uzmanlaşmış teknik yazar; karmaşık fikirleri anlaşılır ve erişilebilir kılar.

SQL Tetikleyicileri Hakkında Sık Sorulan Sorular

SQL Tetikleyicisi nedir?

SQL Tetikleyicisi, INSERT, UPDATE veya DELETE gibi belirli olaylara yanıt olarak otomatik olarak çalışan özel bir veritabanı yordamıdır. Veri bütünlüğünü sağlar ve görevleri otomatikleştirir.

Bir SQL Tetikleyicisini nasıl oluştururum?

Bir SQL Tetikleyicisini, tetikleyiciyi etkinleştirecek olayı ve yürütülecek yordam kodunu belirterek CREATE TRIGGER ifadesiyle oluşturursunuz.

SQL Tetikleyicilerinin farklı türleri nelerdir?

DML Tetikleyicileri (AFTER, BEFORE, INSTEAD OF), DDL Tetikleyicileri ve Oturum Açma Tetikleyicileri dâhil çeşitli türler vardır. Her tür, bir veritabanı işleminin farklı aşamalarında çalışır.

SQL tetikleyicileri yalnızca Oracle veya SQL Server gibi belirli veritabanı yönetim sistemlerinde mi kullanılır?

Tetikleyiciler Oracle gibi belirli veritabanlarıyla sınırlı değildir. SQL'i destekleyen birçok ilişkisel veritabanı yönetim sisteminde bulunan bir özelliktir.

Konular

DataCamp ile SQL öğrenin

Program

Veritabanı Yöneticileri için SQL

16 sa
Kendine güvenen, yüksek kazançlı bir SQL DBA olmak için ihtiyacınız olan veritabanı becerilerini kazanın. PostgreSQL veritabanınızı nasıl oluşturacağınızı, büyüteceğinizi ve yöneteceğinizi öğrenin.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow