Respond needs javascript to run. To find out more click here
trigger » Serdar Demir
RSS
 

Posts Tagged ‘trigger’

Sql trigger nedir resimli anlatım

01 Ağu

Sql trigger

Trigger nedir?

Trigger tetikleyici anlamına gelir programlarımızda belirli bir işlem gerçekleştiğinde programımızı tetiklemeye yarar veya tablolar arası veri bütünlüğünü korumak için kullanılırlar. Aslında triggerlar bir store proceduredür fakat farkı kendiliğinden çalışmasıdır.

Triggerlarda ya hep ya hiç mantığı vardır yani program zorlukla karşı karşıya kaldıgında bütün işlem geri döner. Örneğin atmden para çekiyorsunuz parayı aldığınızda sizin hesabınızdan para düşülmemişse işlemin yarısında elektrik kesilmişşe vb. Olaylarda yapılan bütün işlemler iptal olur geri döner (transaction konusunda ayrıntılı anlatcağım)Bu işlemi rollback transaction ifadesi ile gerçekleştirir trigger tanımlamamız içinde transaction blogu olması gerekir.

Rollback transaction ifadesini minimum düzeyde kullanmamız önerilir çünkü büyük veritabanlarında bu işlemlerin yapılması çok büyük yük oluşturur buda performasın düşmesine sebep olur. Triggerlarla silme, güncelleme, ekleme işlemlerini yapabiliriz. Yani bir tabloda birden fazla trigger tanımlayabiliriz.

Trigger tanımlama:

Tabloyu seçip all tasks/manage triggers diyerek bize aşağıdaki gibi hazır bir şablon oluşturur.

Bu şablonu kendi triggerımıza göre tasarlayacağız. Triggerımıza bir isim veriyoruz daha sonra for insert,delete,update işlemlerinden  birini seçiyoruz(trigger seçtiğimiz işlem gerçekleştiğinde devreye girecek)

Delete triggerı :

Bu trigger tablodan silme işlemlerinde tetiklenir ve silinen verinin bir kopyasını deleted tablosunda saklar bunu  Örnek bir trigger oluşrarak anlatalım

Veritabanımızdan veri silmek istendiğinde hem silme işlemini önleyelim hemde silemezsin mesajı yayınlayalım.

Create trigger silme

on serdar for delete

as

if(select count(*) from deleted)>0

begin

raiserror(‘ Oops Bu tablodan veri silemezsiniz !!’,16,1)

//bu sayılar ne diye aklınıza bi soru gelebilir billiyodum ama unuttum gereksiz bişeydi

Rollback transaction

Return

End

Bu kodu üstteki formda veya query analayser da çalıştırdığımızda trigger oluşturuluyor bunu üstteki resimde new yazan açılır listede şeklinde trigger oluşturduğunu görürüz.

Gelelim triggerımızı denemeye tablomuzdan adı serdar olan kaydımızı silmeye çalışalım.

Delete from serdar where isim=’serdar’

Bu hata mesajı ile karşılaşıyoruz.

Insert triggerı:

Bir tablo içerisine veri eklemek için insert ifadesi kullanılır. Bu trigger insert işlemi gerçekleştiğinde inserted diye sanal bir tablo oluşturur ve ana tabloya eklenen veri inserted tablosuna da eklenir. İnsert triggerını bir uygulama ile açıklayalım: Sql final sınavında soruyu yanlış anlayıp yazdığım triggera benzer bir örnek J  Diyelim ki internetten satiş yapan bir firmayız satılan mallar giriş yapılan mallar stok durumunun tutlduğu tablolarımız var örneğin stok tablomuzda stok miktarı satılan  adet ve kalan adetleri saklıyoruz diger tablomuz ise satış tablosu bu tabloda satılan malın adı fiyatı vb. özellikler tutuluyor şimdi satış tablosuna bir kayıt girildiğinde benim stok tablomda satılan adetin artmasını ve elimde kalan miktarın azalmasını istiyorum bu beni iki tabloyada kayıt yapmaktan kurtaracak  gelelim triigera;

Create trigger stok_guncelle

On satis

For instert as

Update stok set stok.satilan=stok.satilan+1 from stok inner join inserted on stok.urun_id=inserted.urun_id

// biraz açıklama ekleyelim bir mal sattıgımız zaman diyelim mp3 çalar id si 1 olsun şimdi ben satış tablosuna bir kayıt eklediğimde stok tablosunda satilan sütununun  değeri 1 artacak kalan 1 azalacak (bu bir azalma kısmını Formula yoluyla tablo dizayn kısmında Formula alanına (stok-satilan) yazarak sağlıyoruz)

Aynı işlemi ürün aldığımızda da kullanabiliriz gördüğünüz gibi sadece trigger oluşturuyoruz ve otomatikmen olay gerçekleştiğinde devreye giriyor.

Son trigger çeşidimiz update triggerı:

Bu triggerımızı da delete triggerı gibi basit bir örnekle açıklayalım bu tablomuzun güncellenmesini önleyelim

Create trigger guncelle

On satis

For update as

İf update(numara)

Begin

Begin transaction

Raiserror(‘Güncelleme yapılamaz’,10,1)

Rollback transaction

Return