Trigger (Tetikleyici) Nedir ? Nasıl Kullanılır ?
Bu yazımda TRIGGER'ları MYSQL kullanarak inceleyeceğiz.
INSERT , UPDATE , DELETE işlemlerinin gerçekleşmesi halinde devreye girebilen STORED PROCEDURE(SAKLI YORDAM) yapısıdır.Hassas verilerin değişiminin veritabanında kayıtlarını tutmayı , gerek eski haline getirmek ,gerek ise oluşan durumlara göre belirlediğimiz işlemleri yapabilmemizi sağlar.
TRIGGER çalışmaya başlamadan önce bir TRANSACTION açılır.TRANSACTION konusuna burada detaylı olarak girmiyorum.Fakat temel bir şekilde kullanımı şu şekilde gerçekleşiyor.Eğer TRIGGER bloğunda bir ROLLBACK var ifadesi çalıştırılırsa oluşan durumlarda son işlem geçersiz olur ve yapılan işlemler eski haline dönderilir , eğer yok ise otomatik olarak COMMIT yapılır ve işlem gerçekleştirilir.Bunu şöyle örnekleyelim ; örneğin bir ATM'den birisine para transferi yapıyorsunuz,para hesabınızdan düştü fakat gönderdiğiniz kişinin hesabına para ulaşmadı.İşte bu durumlarda TRANSACTION devreye giriyor ve yaptığı kontrol ile parayı sizin hesabınıza tekrar yatırıyor.
Syntax'ı (Yazım Kuralı):
INSERT , UPDATE , DELETE işlemlerinin gerçekleşmesi halinde devreye girebilen STORED PROCEDURE(SAKLI YORDAM) yapısıdır.Hassas verilerin değişiminin veritabanında kayıtlarını tutmayı , gerek eski haline getirmek ,gerek ise oluşan durumlara göre belirlediğimiz işlemleri yapabilmemizi sağlar.
TRIGGER çalışmaya başlamadan önce bir TRANSACTION açılır.TRANSACTION konusuna burada detaylı olarak girmiyorum.Fakat temel bir şekilde kullanımı şu şekilde gerçekleşiyor.Eğer TRIGGER bloğunda bir ROLLBACK var ifadesi çalıştırılırsa oluşan durumlarda son işlem geçersiz olur ve yapılan işlemler eski haline dönderilir , eğer yok ise otomatik olarak COMMIT yapılır ve işlem gerçekleştirilir.Bunu şöyle örnekleyelim ; örneğin bir ATM'den birisine para transferi yapıyorsunuz,para hesabınızdan düştü fakat gönderdiğiniz kişinin hesabına para ulaşmadı.İşte bu durumlarda TRANSACTION devreye giriyor ve yaptığı kontrol ile parayı sizin hesabınıza tekrar yatırıyor.
- INSERT işleminde sadece NEW kullanılır.
- UPDATE işleminde hem NEW hem de OLD kullanılır.
- DELETE işleminde ise sadece OLD kullanılır.
Syntax'ı (Yazım Kuralı):
CREATE [ DEFINER={ < kullanici adı >} | CURRENT_USER} ] TRIGGER < trigger adı > { BEFORE | AFTER } { UPDATE | INSERT | DELETE } ON < tablo ad > FOR EACH ROW BEGIN .. … END ;Örnek bir uygulama ile daha anlaşılır bir hale getirelim.
Yapılan INSERT ve DELETE işlemlerinde tetiklenecek birer TRIGGER oluşturalım. Bir futbol takımı için mülakat seçimi yapılsın , eğer ki jürinin verdiği puanlarla toplamda 85 puanın üzerinde olan kişileri futbol takımına aldığımızı varsayalım.Takım alınan her kişiye otomatik olarak 1-100 arasında takım numaraları verilmektedir.Daha sonra takımdan ayrılanları da belirtelim.
Öncelikle tablolarımızı oluşturuyoruz ;
CREATE TABLE mulakat_listesi (tcno INT NOT NULL,isim VARCHAR(20),soyisim VARCHAR(20), mulakat_puani INT,PRIMARY(tcno));Mülakat listesine katılan kişilerin tcno , isim , soyisim ve mülakattan aldıkları puan için mulakat_puani field alanlarını tanımladık.
CREATE TABLE futbol_takimi(takimno INT NOT NULL,ad VARCHAR (20),soyad VARCHAR(30), tarih TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);Futbol takımına seçilecek olan kişiler için futbol_takimi tablosunda her bir kişinin bir takimno , ad , soyad ve tarih field alanlarını tanımladık.
CREATE TABLE ayrilan (ayrilan_isim VARCHAR(20),ayrilan_soyisim VARCHAR(20), giris_tarih VARCHAR(100),ayrilma_tarih TIMESTAMPS NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);Takımdan ayrılanları tutacağımız ayrilan tablosunda ayrilan_isim , ayrilan_soyisim , giris_tarih ve ayrilma_tarih field alanlarını tanımladık.
Ardından TRIGGER'ımızı oluşturuyoruz.
DELIMITER $$ CREATE TRIGGER takima_girmek BEFORE INSERT ON mulakat_listesi FOR EACH ROW BEGIN IF(NEW.mulakat_puani>85) THEN INSERT INTO futbol_takimi (takimno,ad,soyad) VALUES ((FLOOR(RAND()*100)),NEW.isim,NEW.soyisim); END IF; END;$$Burada yapmış olduğumuz şey , eğer seçmelerde mülakat puanı 85'ten yüksek olan bir kişi var ise bu kişinin bilgilerini alıp , 1 ile 100 arasında bir takım numarası verip , futbol takımı tablosuna eklemek.Bu TRIGGER'ı oluşturup çalıştırdığımızda sistem bizim yerimize TRIGGER koşulunu sağlayan durumda bu işlemleri gerçekleştirecektir.
DELIMITER $$
CREATE TRIGGER ayrilma_islemi AFTER DELETE ON futbol_takimi FOR EACH ROW BEGIN INSERT INTO ayrilan (ayrilan_isim,ayrilan_soyisim,giris_tarih) VALUES(OLD.ad,OLD.soyad,OLD.tarih); END;$$Burada ise eğer takımdan ayrılan olursa bu kişinin adını , soyadını takıma giriş tarihini ve çıkış tarihini ayrılan tablosuna ekliyor.
0 yorum :