Foruma hoş geldin 👋, Ziyaretçi

Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️

SignUp Now!
  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner
Katılım
7 Nis 2025
Mesajlar
782
Saklı Yordamlar ve Fonksiyonlar, ihtiyacımız olduğunda çağırdığımız kod bloklarıdır. Ancak bazen, belirli bir olay (örneğin bir tabloya yeni bir satır eklendiğinde veya mevcut bir satır güncellendiğinde) meydana geldiğinde veritabanının otomatik olarak belirli bir eylemi gerçekleştirmesini isteyebiliriz. İşte Tetikleyiciler (Triggers) tam olarak bu amaçla kullanılır. Bir tetikleyici, bir tabloda belirli bir veri değiştirme işlemi (INSERT, UPDATE, DELETE) gerçekleştiğinde otomatik olarak çalışan, veritabanında depolanan özel bir saklı yordam türüdür.

Tetikleyicilerin Amacı ve Kullanım Alanları

Tetikleyiciler genellikle şu amaçlarla kullanılır:

  • Karmaşık İş Kurallarını Uygulama: CHECK CONSTRAINT ile uygulanamayan daha karmaşık iş mantığını veya birden fazla tabloyu etkileyen kuralları uygulamak.
  • Denetim Kayıtları (Auditing): Tablolardaki veri değişikliklerini (kim, ne zaman, neyi değiştirdi) otomatik olarak başka bir denetim tablosuna kaydetmek.
  • Veri Bütünlüğünü Sağlama: İlişkili tablolarda otomatik güncellemeler veya silmeler yaparak veri tutarlılığını korumak (bazı DBMS'lerde ON UPDATE CASCADE veya ON DELETE CASCADE gibi referans bütünlüğü kısıtlamaları tercih edilebilir).
  • Türetilmiş Verileri Otomatik Güncelleme: Bir tablodaki verilere bağlı olarak başka bir tablodaki özet veya türetilmiş verileri otomatik olarak güncellemek (örneğin, sipariş detayları eklendiğinde ana sipariş tablosundaki toplam sipariş tutarını güncellemek).
Tetikleyicinin Bileşenleri

Bir tetikleyici tanımlarken şu unsurlar belirtilir:

  1. Olay (Event): Tetikleyicinin çalışmasına neden olan DML (Data Manipulation Language) işlemi. Bunlar INSERT, UPDATE veya DELETE olabilir. Bir tetikleyici birden fazla olaya yanıt verebilir (ON INSERT OR UPDATE OR DELETE).
  2. Zamanlama (Timing): Olaydan önce mi (BEFORE) yoksa sonra mı (AFTER) çalışacağı.
    • BEFORE tetikleyiciler, veri değiştirme işlemi gerçekleşmeden önce çalışır. Genellikle veriyi doğrulamak veya değiştirmek için kullanılır.
    • AFTER tetikleyiciler, veri değiştirme işlemi tamamlandıktan sonra çalışır. Genellikle denetim, ilişkili tablolarda güncelleme veya diğer yan etkileri gerçekleştirmek için kullanılır.
    • (Not: SQL Server gibi bazı DBMS'lerde INSTEAD OF tetikleyiciler de bulunur, bunlar olayın kendisi yerine çalışır ve özellikle görünümlerde (views) güncelleme yapmak için faydalıdır.)
  3. Tablo (Table): Tetikleyicinin tanımlandığı ve olayın gerçekleştiği tablo.
  4. Aksiyon (Action): Olay meydana geldiğinde tetikleyicinin çalıştıracağı SQL kodu bloğu.
Tetikleyiciler çalışırken, ilgili DBMS, etkilenen veriyi içeren özel geçici tablolar veya sanal görünümler oluşturur. Örneğin:

  • INSERT ve UPDATE tetikleyicilerinde, yeni veya güncellenmiş satırları içeren bir "inserted" (veya benzeri) yapı.
  • DELETE ve UPDATE tetikleyicilerinde, silinmiş veya güncellenmeden önceki orijinal satırları içeren bir "deleted" (veya benzeri) yapı.Bu yapılar, tetikleyici kodunun etkilenen verilere erişmesini ve işlem yapmasını sağlar.
Temel Tetikleyici Sözdizimi (DBMS'e Göre Farklılıklar Olabilir):

Kod:
-- Basit bir AFTER INSERT tetikleyicisi oluşturma (Örnek: Sipariş detayları eklendiğinde ana sipariş tablosunu güncelleme)CREATE TRIGGER trig_SiparisDetaylari_AFTER_INSERTAFTER INSERT ON SiparisDetaylariFOR EACH ROW -- PostgreSQL, MySQL gibi bazılarında satır bazlı tetikleyici için kullanılırASBEGIN-- SQL Server sözdizimi örneği:-- inserted tablosu yeni eklenen satırları içerirUPDATE SiparislerSET ToplamTutar = ToplamTutar + inserted.Miktar * inserted.Fiyat -- Basit bir hesaplama varsayımıFROM insertedWHERE Siparisler.SiparisID = inserted.SiparisID;

-- PostgreSQL/MySQL sözdizimi örneği (FOR EACH ROW ve NEW kullanarak):<br>-- UPDATE Siparisler<br>-- SET ToplamTutar = ToplamTutar + NEW.Miktar * NEW.Fiyat<br>-- WHERE Siparisler.SiparisID = NEW.SiparisID;<br>
END;GO -- SQL Server

Kod:
-- Basit bir AFTER DELETE tetikleyicisi oluşturma (Örnek: Sipariş detayları silindiğinde ana sipariş tablosunu güncelleme)CREATE TRIGGER trig_SiparisDetaylari_AFTER_DELETEAFTER DELETE ON SiparisDetaylariFOR EACH ROW -- PostgreSQL, MySQL gibi bazılarındaASBEGIN-- SQL Server sözdizimi örneği:-- deleted tablosu silinen satırları içerirUPDATE SiparislerSET ToplamTutar = ToplamTutar - deleted.Miktar * deleted.Fiyat -- Basit bir hesaplama varsayımıFROM deletedWHERE Siparisler.SiparisID = deleted.SiparisID;

-- PostgreSQL/MySQL sözdizimi örneği (FOR EACH ROW ve OLD kullanarak):<br>-- UPDATE Siparisler<br>-- SET ToplamTutar = ToplamTutar - OLD.Miktar * OLD.Fiyat<br>-- WHERE Siparisler.SiparisID = OLD.SiparisID;<br>
END;GO -- SQL Server

Tetikleyicilerin Dikkatli Kullanımı

Tetikleyiciler güçlü araçlar olsa da, kullanımları bazı potansiyel dezavantajları beraberinde getirebilir:

  • Karmaşıklık ve Hata Ayıklama: Tetikleyiciler arka planda otomatik çalıştığı için, ne zaman ve neden çalıştıklarını anlamak zor olabilir. Hata ayıklaması diğer SQL kodlarına göre daha zahmetli olabilir.
  • Performans Etkisi: İyi yazılmamış veya çok karmaşık tetikleyiciler, DML işlemlerinin performansını ciddi şekilde düşürebilir.
  • Gizli Mantık: İş mantığının bir kısmı uygulama kodunda, bir kısmı saklı yordamlarda ve bir kısmı tetikleyicilerde olduğunda, sistemin genel işleyişini anlamak zorlaşabilir.
Genel kural olarak, bir iş mantığını bir kısıtlama (constraint), saklı yordam veya uygulama kodu ile çözmek mümkünse, tetikleyici kullanmaktan kaçınmak düşünülebilir. Ancak denetim veya bazı otomatik senkronizasyon görevleri için tetikleyiciler çok uygun bir çözüm sunabilir.

Bu bölümde, veritabanının otomatik tepkilerini yöneten tetikleyiciler konusuna giriş yaptık. Bu, veritabanı programlama yeteneklerinizi tamamlayan önemli bir konudur.

Veritabanı sistemleri ve SQL'in sunduğu imkanlar oldukça geniştir. Bu seri, size temelden ileri seviyeye kadar birçok konuda bir başlangıç ve genel bir bakış sunmayı amaçladı.

Eğer bu seriyi daha da genişletmek isterseniz, belirli bir DBMS'in detaylarına inmek, farklı indeks türlerini ve daha gelişmiş performans ayarlamalarını ele almak, belki de dağıtık veritabanı sistemleri veya bulut veritabanı hizmetleri gibi modern konulara daha derinlemesine dalmak gibi seçenekler değerlendirilebilir.

Umarım bu ek bölüm de veritabanı bilginize katkı sağlamıştır.


 

Şu an konuyu görüntüleyenler

Geri
Üst