Kurumsal Otomasyon Çözümlerinde Zirve

SQL Server da Trigger (Tetikleyici) Kavramı

SQL SERVER DA TRIGGER (TETIKLEYICI) KAVRAMI

Bu makalemizde trigger konusunda genis bir bilgi verecegim. Trigger konusu çok fazla karistirilan bir konu oldugu için makale disinda videolu ders te sitemize eklenecektir.

Lafi daha fazla uzatmadan triggerlardan bahsedelim, ne oldugunu bilelim ve trigger kodlarimizi yazmaya baslayalim. Öncelikle 3 çesit trigger vardir. Bunlar:

1. Insert Trigger (ilgili tabloda ekleme islemi oldugu anda)
2- 2. Delete Trigger (ilgili tabloda silme islemi oldugu anda)
3- 3. Update Trigger (ilgili tabloda güncelleme islemi oldugu anda)

Peki trigger nedir? Triggerin türkçe anlami tetikleyicidir. Adindan da anlasilacagi gibi bir tablodaki degiskligi baska bir tabloda istedigimiz sekilde otomatik olarak degistirmek istedigimizde trigger kullaniriz. Buradan da anlasilacagi gibi bu uygulama (trigger) 2 farkli tablo kullanmaktadir.

Hemen örneklerimiz üzerinden gidelim. Konunun daha iyi anlasilmasi için örnegimde asagidaki gibi urunler ve satislar adinda basit 2 tablo olusturdum.

sql-erver-da-trigger-Tetikleyici-kavrami-1

sql-erver-da-trigger-Tetikleyici-kavrami-1

sql-erver-da-trigger-Tetikleyici-kavrami-2

sql-erver-da-trigger-Tetikleyici-kavrami-2

Tablolarimizi iyice inceleyelim. Sütun adlarina dikkat edelim.

INSERT TRIGGER
Simdi yapacagimiz ilk trigger insert trigger olsun. Burdaki amaç trigger ekleyecegimiz tabloda herhangi bir ekleme islemi oldugu anda diger tabloda da yazdigimiz algoritmanin otomatik olarak etki etmesini saglamak.
Örnegimizden yola çikalim. Kitap ürünümüzün stoktaki adedi 50 tane ama biz sunu istiyoruz. Kitaptan 10 adet sattigimizda stoktaki sayisinin otomatik olarak 10 tane azalmasini istiyoruz. Hiçbir islem yapmazsak bu mümkün degil. Tablomuza bakarsak ben 10 tane kitap sattigim halde stoktaki sayim hala 50 tane görünüyor. Simdi bu olayi insert trigger ile halledelim.

Yeni bir sql query olusturalim ve Insert trigger için asagidaki kodlari yazalim.

create trigger urunAdediGuncelle on satislar –1
for insert –2
as begin –3
declare @urunid int, @satisadedi int –4
select @urunid =urunid, @satisAdedi=satisAdedi from inserted –5
update urunler set urunadedi=urunadedi-@satisadedi where urunid=@urunid –6
end –7

Simdi yazdigimiz kodlari açiklayalim.
–1. Yeni bir trigger olusturmak için create trigger diyoruz, triggerimizin adini yaziyoruz ve satislar tablosunda ekleme oldugu anda bir kod blogu çalisacagi için on satislar diyoruz.
–2 . Trigger çesidimizi belirtiyoruz. Satislar tablosunda herhangi bir ekleme islemi oldugu anda sql server “inserted” adinda bir tablo olusturur. Bu tablonun adini veya yerini degistiremeyiz.
–3. Kodlarimizi yazacagimiz blogu açiyoruz.
–4. Urunid ve satisadedi adinda int türünde 2 tane degisken tanimladik.
–5. Sql server arka planda inserted adinda bir tablo olusturur demistik. Simdi bu tablodan (inserted tablosu) tanimladigimiz degiskenlere degerlerini atiyoruz.
–6. Bu kisimda da diger tabloda (bizim için urunler tablosu) yapilmasi gereken degisikligi sorgu biçiminde yaziyoruz. Sorgumuzda urunler tablosundaki urunadedinin girdigimiz satisadedi kadar azalmasini saglamisiz. Tabiî ki daha sonra where kosulu ile bunun satisini yaptigimiz üründe gerçeklesmesini saglamisiz.
–7. Sonlandiriyoruz.

Triggerimizi execute edelim, yeni bir satis girelim ve çalistigini görelim.

sql-erver-da-trigger-Tetikleyici-kavrami-3

sql-erver-da-trigger-Tetikleyici-kavrami-3

sql-erver-da-trigger-Tetikleyici-kavrami-4

sql-erver-da-trigger-Tetikleyici-kavrami-4

Kalemden 10 adet daha sattik ve bu kez kalemin stok adedinin otomatik olarak 10 azaldigini gördük.

DELETE TRIGGER

Simdi diger bir trigger çesidi olan delete triggerI inceleyelim. Burdaki amaç trigger ekleyecegimiz tabloda herhangi bir silme islemi oldugu anda diger tabloda da, yazdigimiz sorgunun otomatik olarak etki etmesini saglamak.
Örnegimizle iliskilendirecek olursak, herhangi bir ürün sattigimizda bu ürünün stok adedi sattigimiz adet kadar düsecektir. Bunu insert trigger ile yapmistik. Sattigimiz ürünü geri iade alirsak ve satisi iptal edersek stogumuzun eski haline dönmesini saglamamiz gerek. Yani sattigimiz ürün kadar stoga eklenmesi gerek. Bunuda delete trigger ile yapiyoruz.

Hemen delete triggerimizi yazalim
create trigger satisIptalEt on satislar –1
for delete –2
as
begin
declare @urunid int,@satisadedi int
select @urunid =urunid, @satisadedi=satisAdedi from deleted –3
update urunler set urunadedi=urunadedi+@satisadedi where urunid=@urunid –4
end

–1. SatisIptalEt adinda yeni bir trigger olusturuyoruz. Tabi bu satislar tablosu üzerinde bir silme oldugunda çalisacagi için on satislar diyoruz.
–2. Trigger çesidimizi belirtiyoruz. Burada sql server arka planda “deleted” adinda bir tablo olusturacaktir.
–3. Tanimladigimiz degiskenlerin degerlerini deleted tablosundan aliyoruz.
–4. Yine sorgumuzu yaziyoruz. Bu kez sildigimiz satisin satis adedi kadar o urunun urun adedine eklenmesini sagliyoruz.
Triggerimizi execute edelim, bir satis silelim ve nasil etki ettigini görelim.

sql-erver-da-trigger-Tetikleyici-kavrami-5

sql-erver-da-trigger-Tetikleyici-kavrami-5

Kalem adli üründen 100 adet sattigimizda ilk önce 255 olan ürün adedi 155 e düsmüs olacaktir. Daha sonra bu satisi sildigimizde bu ürünün stok adedinin otomatik olarak tekrar 255 oldugunu görebilirsiniz.

UPDATE TRIGGER

Simdi son olarak update triggeri inceleyelim. Burdaki amaç trigger ekleyecegimiz tabloda herhangi bir güncelleme islemi oldugu anda diger tabloda da, yazdigimiz sorgunun otomatik olarak etki etmesini saglamak.

Örnegimizde de daha önce satisini yaptigimiz bir ürünün satis adedini degistirelim. Yani var olan bir satisin satis adedini degistisrerek bunun urunler tablosundaki ürün adedine nasil yansidigini inceleyelim.

Yeni bir sql query olusturarak update triggerimizi yazmaya baslayalim.

create trigger SatisGuncelle on satislar
for update –1
as
begin
declare @urunid int, @eskisatisadedi int, @yenisatisadedi int, @fark int
select @urunid =urunid, @eskisatisadedi=satisAdedi from deleted –2
select @yenisatisadedi=satisadedi from inserted –3
set @fark=@yenisatisadedi – @eskisatisadedi –4
update urunler set urunadedi=urunadedi-@fark where urunid=@urunid –5
end

–1. Trigger çesidimizi belirtiyoruz. Satislar tablosu üzerinde herhangi bir güncelleme oldugu anda çalisacaktir. Burada bilmeniz gereken update triggerin insert ve delete triggerdan biraz daha farkli çalismasidir. Triggerda direk bir güncelleme islemi olmaz. Güncelleme yapabilmek için önce güncellenen tabloyu siler ve daha sonra güncellenmis sekli ile tabloyu tekrar ekler.
–2. Yukarida da belittigimiz gibi once silme islemi yapiyoruz ve silinen tablodan eski satis adedini olusturdugumuz degiskene atiyoruz.
–3. Simdide insert tablosundan guncellenen satis adedini yenisatisadedi adli degiskene aktariyoruz.
–4. Yeni satis adedinden eski satis adedini çikartarak aradaki farki fark adli bir degiskene aktariyoruz.
–5. Son olarak urunler tablosundaki ürün adedini aradaki fark kadar azaltiyoruz. Tabiki yine where kosulu ile hangi üründe degisiklik yapilacagini belirtiyoruz.

Yaptigimiz islemi daha iyi anlamk için tablolarda olan degisiklikleri gözlemleyelim.

sql-erver-da-trigger-Tetikleyici-kavrami-6

sql-erver-da-trigger-Tetikleyici-kavrami-6

sql-erver-da-trigger-Tetikleyici-kavrami-7

sql-erver-da-trigger-Tetikleyici-kavrami-7

10 adet olan kitap satisimizi ayni satis üzerinde 20 ye çikartiyoruz ve urunler tablosundada 40 adet olan stok miktarinin otomatik olarak yazdigimiz trigger sayesinde 30 a düstügünü görecegiz.

Makelemizin sonlarina dogru olusturdugumuz bir triggerin nasil degistireleceigini görelim. Bunun için trigger yazdigimiz tablo altindan triggers kabini açarak degistirmek istedigimiz trigger üzerine sagtus yapip modify dersek yazdigimiz trigger kodlari karsimiza gelecektir.

sql-erver-da-trigger-Tetikleyici-kavrami-8

sql-erver-da-trigger-Tetikleyici-kavrami-8

Not: Yazdigimiz trigger üzerinde degislik yaptigimizda create trigger yazdigimiz kismi alter trigger olarak degistirdikten sonra execute yapmamiz gerekecektir.

Bu makalemizde de trigger konusunda oldukça genis yer verdik. Tabiki trigger ile yapacaklariniz bu kadarla sinirli degil. Ben konunun iyi anlasilmasi için basit tablolarla çalistim ve ona göre örnek triggerlar olusturdum. Sizde ihtiyaç dogrultusunda çok daha farkli triggerler yazabilirsiniz.

Triggerlar ile ilgili videomuzda yakinda yayinlanacaktir.

Iyi çalismalar…

Yorum Yapılmamış

Bir cevap yazın