Veritabanı Trigger'ı
Veritabanı Tetikleyicisi
- İngilizcesi
- Database Trigger
- Okunuşu
- deytıbeys trigır
Kısaca
Veritabanı trigger'ı, bir tabloda ekleme, güncelleme ya da silme gibi seçilmiş bir olay gerçekleştiğinde otomatik çalışan, veritabanında saklanan koddur.
Veritabanı trigger'ı nedir?
Veritabanı trigger'ı, bir tabloya, bazen de bir view'a ya da tüm veritabanına bağlanan ve bir olaya karşılık otomatik olarak tetiklenen prosedürel kod parçasıdır. En yaygın olaylar INSERT, UPDATE ve DELETE'tir. Uygulamalar bir trigger'ı asla doğrudan çağırmaz; olay ne zaman gerçekleşirse, hangi program yol açarsa açsın veritabanı onu çalıştırır.
Bir trigger tanımlarken zamanlamasını ve ayrıntı düzeyini seçersiniz. BEFORE trigger'ı değişiklikten önce çalışır ve gelen satırı doğrulayabilir, değiştirebilir ya da reddedebilir; AFTER trigger'ı değişiklik yapıldıktan sonra çalışır ve çoğunlukla denetim kayıtları yazmak ya da özet tabloları güncellemek için kullanılır; INSTEAD OF trigger'ı, genellikle bir view üzerinde, işlemin yerini alır. Satır düzeyindeki trigger etkilenen her satır için bir kez çalışır ve eski ile yeni değerleri görebilir; ifade düzeyindeki trigger ise ifade başına bir kez çalışır. Trigger, onu tetikleyen ifadeyle aynı transaction içinde çalışır; bu yüzden trigger başarısız olursa tüm değişiklik geri alınır.
Trigger, hareket sensörlü bir lamba gibidir: kimse anahtarı çevirmez, olayın kendisi onu yakar. Tipik kullanımlar denetim kayıtları, updated_at zaman damgalarını güncel tutmak, basit kısıtların ifade edemediği kuralları uygulamak ve denormalize edilmiş sayaçları ya da arama sütunlarını senkron tutmaktır.
Trigger çoğu zaman stored procedure ile karıştırılır. Stored procedure yalnızca bir şey onu adıyla çağırdığında çalışır; trigger ise veri değiştiğinde örtük olarak çalışır ve birçok veritabanında trigger yalnızca bir fonksiyonu çağırır. Trigger'lar bir sistemi anlaşılmaz hale getirebilir; çünkü uygulama kodunda görünmeyen mantık çalışır ve trigger zincirleri yazmaları yavaşlatabilir. Birçok ekip iş kurallarını uygulamada tutar ve trigger'ları yalnızca denetim gibi basit, veritabanı düzeyindeki işler için kullanır.
Önemli noktalar
- Trigger, bir tabloya veri eklendiğinde, güncellendiğinde veya silindiğinde otomatik çalışır.
BEFOREtrigger'ları gelen veriyi kontrol edebilir ya da değiştirebilir;AFTERtrigger'ları tamamlanmış değişikliklere tepki verir.- Satır düzeyindeki trigger'lar bir satırın hem eski hem yeni değerlerini okuyabilir.
- Trigger'lar, onları tetikleyen değişiklikle aynı transaction içinde çalışır.
- Gizli trigger mantığı geliştiricileri şaşırtabilir; bu yüzden trigger'ları küçük tutun ve belgeleyin.
Örnek
CREATE FUNCTION set_updated_at() RETURNS trigger AS $$
BEGIN
NEW.updated_at := now(); -- change the row before it is saved
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER orders_set_updated_at
BEFORE UPDATE ON orders
FOR EACH ROW
EXECUTE FUNCTION set_updated_at();Sık sorulan sorular
Trigger ile stored procedure arasındaki fark nedir?
Stored procedure yalnızca bir uygulama ya da kullanıcı onu açıkça çağırdığında çalışır. Trigger ise bir tabloda belirli bir olay gerçekleştiğinde otomatik çalışır ve doğrudan çağrılamaz.
Veritabanı trigger'ları kötü bir uygulama mıdır?
Doğası gereği değil, ancak mantığı uygulama kodunu okuyanlardan gizlerler ve yazmaları yavaşlatabilirler. Denetim ya da zaman damgaları gibi küçük, veritabanı düzeyindeki görevler için iyi çalışırlar; karmaşık iş mantığını uygulamada test etmek ve sürdürmek genellikle daha kolaydır.
BEFORE ve AFTER trigger'ları arasındaki fark nedir?
BEFORE trigger'ı satır yazılmadan önce çalışır; bu yüzden veriyi değiştirebilir ya da reddedebilir. AFTER trigger'ı değişiklik uygulandıktan sonra çalışır; bu da değişikliğe tepki vermeye, örneğin bir denetim tablosuna yazmaya uygun kılar.
İlgili sayfalar
- Stored ProcedureVeritabanları, s. 33Stored procedure, veritabanında saklanan adlandırılmış bir SQL ifadeleri kümesidir; uygulamalar her sorguyu göndermek yerine onu tek çağrıyla çalıştırabilir.
- TransactionVeritabanları, s. 36Transaction, tek bir bütün olarak başarılı ya da başarısız olan veritabanı işlemleri grubudur; böylece veri asla yarım kalmış, tutarsız bir durumda bırakılmaz.
- SQLVeritabanları, s. 29SQL, ilişkisel veritabanlarıyla çalışmanın standart dilidir; tablo oluşturmak ve içindeki veriyi eklemek, sorgulamak, güncellemek ve silmek için kullanılır.
- DenormalizasyonVeritabanları, s. 8Denormalizasyon, sık okumalar daha az birleştirme gerektirsin diye verinin tablo ya da dokümanlara bilerek çoğaltılmasıdır; bedeli daha karmaşık yazmalardır.
- Veritabanı View'ıVeritabanları, s. 44Veritabanı view'ı, sanal bir tablo gibi davranan kayıtlı bir SQL sorgusudur; alttaki sorguyu her seferinde tekrarlamak yerine ondan adıyla seçim yapabilirsiniz.
- WebhookBackend ve API'ler, s. 47Webhook, bir uygulamanın, tamamlanan bir ödeme gibi belirli bir olay gerçekleştiği anda sizin verdiğiniz bir URL'ye otomatik olarak gönderdiği HTTP isteğidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin