Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • 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
Yan Yana Banner
Katılım
7 Nis 2025
Konular
367
Mesajlar
780
Çözümler
1
Tepkime puanı
121
Puan
93
Konum
İstanbul
Web sitesi
forumagel.com
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

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri