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 Server | deleted / inserted sanal tabloları | İfade başına bir kez (küme bazlı) |
| PostgreSQL | OLD / NEW | Trigger fonksiyonu + FOR EACH ROW veya STATEMENT |
| MySQL, SQLite | OLD / NEW | Satır başına |
| Oracle | :OLD / :NEW | Satı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.