Sözdizimi:
Bir tetikleyici oluşturmak için basit sözdizimi aşağıdadır:
>> CREATE TRIGGER trigger_name [ÖNCE|SONRA|BUNUN YERİNE] event-name ON table_name [ ----Trigger Logic ];İşte yukarıdaki genel sorgunun açıklaması.
- tetikleyici_adı: Bir tetikleyicinin adı
- ÖNCE, SONRA, YERİNE: Tetikleyicinin ne zaman etkin olacağına karar veren terimler
- Etkinlik adı: Tetiği tetikleyebilecek olayın başlığı (Bu, INSERT veya UPDATE veya DELETE'den olabilir)
- Tablo ismi: Tetikleyicinin oluşturulacağı tabloyu belirtir
Tetik kavramını kısaca anlamak için uygulamalardan PostgreSQL kabuğunu başlatın. Başka bir sunucuda çalışmak istiyorsanız sunucuyu değiştirin veya klavyenizden enter tuşuna basın. Üzerinde çalışmak istediğiniz veritabanı adını ekleyin, aksi takdirde olduğu gibi bırakın ve enter'a dokunun. Gördüğünüz gibi, şu anda varsayılan olarak 5432 numaralı bağlantı noktasında çalışıyoruz; onu da değiştirebilirsin. Bundan sonra, başka bir kullanıcıyla çalışmak istiyorsanız Postgres dışında bir kullanıcı adı girin veya boş bırakın ve enter düğmesine basın. Artık komut kabuğunuz kullanıma hazır.
INSERT Komutu Üzerine TRIGGER
INSERT komutu bir tetik olayı olarak kullanıldığında bir tetikleyici örneğine bakalım. Bunun için iki yeni tablo oluşturmamız gerekiyor, e.g., “istihdam” ve “denetim”. “İstihdam” tablosu, belirli bir şirkete ait çalışanların kişisel kayıtlarını içerecek ve “denetim” tablosu, çalışanların şirkete ne zaman katıldığına ilişkin bilgileri içerecektir. Tabloları oluşturmak için sorgular aşağıda verilmiştir.
>> TABLO OLUŞTUR (ID INTEGER NOT NULL PRIMARY KEY, Adı VARCHAR(100) NOT NULL, Age VARCHAR(100) NULL DEĞİL, Maaş VARCHAR(100) NOT NULL );>> TABLO denetimi CREATE( empid INTEGER NULL DEĞİL, giriş_tarihi VARCHAR(100) NOT NULL );
Tetikleyici çağrıldığında otomatik olarak yürütülecek veya çalışacak bir prosedür oluşturmanız gerekir. Bir sonraki CREATE TRIGGER komutunda kullanılacaktır. Aşağıdaki komuttan, bir tetikleyiciyi "$examp_table$" değişkeni olarak döndürecek bir "auditlogfunc()" prosedürü oluşturduğumuza dair bir fikir edinebilirsiniz. İşlev, BEGIN yan tümcesi ile başlar ve ardından INSERT ifadesi gelir. Bu INSERT ifadesi, yerleşik işlevi kullanarak “denetim” tablosuna otomatik kimlik ve geçerli saat-tarih ekler ve bu sonucu TRIGGER'a döndürür.
CREATE TRIGGER komutunu kullanarak bir TRIGGER oluşturma zamanı. “employ” tablosunda “emp_trig” isimli bir tetikleyici oluşturuyoruz. AFTER INSERT ON maddesi, bu tetikleyicinin yalnızca insert komutunun yürütülmesinden sonra çalışacağı anlamına gelir. HER SATIR İÇİN, her INSERT komutunun yürütülmesi üzerine, bu tetikleyici, hemen önce oluşturulan “auditlogfunc()” prosedürünü çağıracak ve yürütecektir.
>> HER SATIR İÇİN INSERT ON çalıştırmadan SONRA TRIGGER OLUŞTUR emp_trig YÜRÜTME PROSEDÜRÜ Auditlogfunc();
“İstihdam” tablosuna bazı veriler eklemenin zamanı geldi. Kabukta aşağıdaki INSERT komutunu yürütün.
>> istihdam(Kimlik, Ad, Yaş, Maaş) DEĞERLERİNE EKLE ('1', 'Paul', '34', '60000');
“İstihdam” tablosuna bir göz atın. Veriler INSERT komutuyla başarıyla eklendi.
Şimdi “denetim” tablosuna bir göz atın. Görüyorsunuz, aynı zamanda “emp_trig” ve auditlogfunc() tetikleyicisi nedeniyle güncellendi.
GÜNCELLEME Komutu Üzerine TRIGGER
Şimdi UPDATE komutunu tetik olayı olarak kullanan bir tetikleyici örneğine bakacağız. Resimde görüldüğü gibi “update” ismiyle tekrar yeni bir prosedür oluşturmamız gerekiyor. Bu prosedür aynı zamanda çağrı üzerine 'denetim' tablosuna kayıtlar ekleyecektir.
Şimdi, CREATE TRIGGER komutunu kullanarak “update_emp” adında yeni bir tetikleyici oluşturun. Bu, yalnızca tablodaki UPDATE sorgusunun yürütülmesinden sonra çalışacak ve “güncelleme” prosedürünü arayacaktır.
Kimliğini “2” olarak ayarlayarak “istihdam” tablosunu güncelleyin.
Değişiklikleri aşağıda eklendiği gibi görüntülemek için "istihdam" tablosunun kayıtlarını alın.
“Denetim” tablosunda da görebileceğiniz gibi, “istihdam” tablosu güncellendiğinden yeniden düzenlenmiştir.
DELETE Komutu Üzerine TRIGGER
GUI PostgreSQL üzerinde çalışmak için uygulamalardan pgAdmin 4'ü açın. "Test" şeması altında, bir tablo listesi keşfedeceksiniz. Yeni bir “emp” tablosu ve aynı “denetim” tablosu oluşturun.
Bu sefer tetik komutunu DELETE komutu ile çağıracağız. Aşağıda bazı kayıtlarla birlikte “emp” tablosu bulunmaktadır.
İşte önceki iki güncellemeyi içeren denetim tablosu.
Kayıtları “emp” tablosundan sildikten sonra “denetim” tablosuna eklemeyi tetiklemek için “Del()” adında bir prosedür oluşturun.
CREATE TRIGGER sorgusunu kullanarak bir "del_trig" tetikleyici oluşturun. Bu tetikleyici, “emp” tablosunda bazı DELETE yan tümcesi gerçekleştirildiğinde “Del” prosedürünü yürütecektir.
Çalışanın “id”sinin “5” olduğu “emp” tablosundan bir kaydı silelim. “emp” tablosundan bir satırı siler.
“emp” tablosunun kayıtlarını alın ve bir göz atın. “id”nin “5” olduğu satırın kaldırıldığını görebilirsiniz.
Şimdi “denetim” tablo kayıtlarını çıkarın ve “emp” tablosunda DELETE işlemi yapıldığı için güncellendiğini fark edeceksiniz.
Sonuç:
INSERT, UPDATE ve DELETE işlemlerini gerçekleştirirken TRIGGER kavramını anlamak için neredeyse tüm temel örnekleri yaptık.