Ana içeriğe geç
Kesit SQL
İleri · Veritabanı Tasarımı

Trigger

Bir olay olduğunda otomatik çalışan SQL; satır bazlı ve küme bazlı tetikleyiciler.

Uygulamada aç, 5 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Olay → eylem

Trigger, bir tabloda INSERT, UPDATE veya DELETE olduğunda otomatik çalışır. Denetim kaydı (audit log), türetilmiş alanları güncel tutma ve karmaşık doğrulamalar için kullanılır. Yazım SQL türünden SQL türüne çok değişir; sekmelerle karşılaştır:

CREATE TABLE price_log (
  product_id INTEGER, old_price REAL, new_price REAL
);

CREATE TRIGGER trg_price_change
AFTER UPDATE OF price ON products
FOR EACH ROW
WHEN OLD.price <> NEW.price
BEGIN
  INSERT INTO price_log (product_id, old_price, new_price)
  VALUES (OLD.product_id, OLD.price, NEW.price);
END;

UPDATE products SET price = price + 10 WHERE category = 'Kitap';
SELECT product_id, old_price, new_price FROM price_log ORDER BY product_id;
SQL türüÖnceki / yeni değerÇalışma biçimi
SQL Serverdeleted / inserted sanal tablolarıİfade başına bir kez (küme bazlı)
PostgreSQLOLD / NEWTrigger fonksiyonu + FOR EACH ROW veya STATEMENT
MySQL, SQLiteOLD / NEWSatır başına
Oracle:OLD / :NEWSatır veya ifade düzeyi
SQL Server'ın en sık yapılan trigger hatasıSQL Server trigger'ı her satır için değil, ifade başına bir kez çalışır. 100 satırı güncelleyen bir UPDATE'te inserted tablosunda 100 satır vardır. SELECT @id = product_id FROM inserted gibi tek satır varsayan kod hatalıdır; her zaman küme bazlı yaz.
Dikkatli kullanTrigger'lar “görünmez” mantık ekler: Bir UPDATE'in neden yavaş olduğunu veya beklenmedik bir tabloyu neden değiştirdiğini bulmak zorlaşır.
Alıştırmalara geç (5)