Cemre Acar
MySQL Trigger Kullanımı

MySQL Trigger Kullanımı

Bu yazımda MySQL Trigger Nedir ? MySQL Trigger ne işe yarar ? Neden Trigger kullanıyoruz ? Workbench ile Trigger örnekleri oluşturmak gibi tüm soruları örnekler ile MySQL Workbench üzerinde anlatacağım. SQL üzerine bir giriş yazısı olan Veritabanlarında Sorgulama : SQL’e Giriş yazımı okumadıysanız okumanızı tavsiye ederim.
Geçelim konumuza ve ilk olarak Trigger’ın ne olduğuna değinelim. Türkçeye “tetikleyici” ifadesiyle geçen Trigger, türetilmiş sütun değerlerini otomatik olarak oluşturma, olay günlüğü kaydetme ve tablo erişimiyle ilgili bilgileri depolama, tabloların senkronize çoğaltılması ve geçersiz işlemleri önleme gibi çeşitli kullanım amaçlarına hizmet ediyor.
Yani kısaca tablo üzerinde bir işlem gerçekleştiğinde başka bir işlemi tetiklemesi istendiği zaman kullanılır. 


Trigger Oluşturmak 

DELIMITER $$

CREATE TRIGGER [trigger_ismi]
ON [tablo_ismi]
[AFTER ya da BEFORE] [INSERT UPDATE ya da DELETE]
FOR EACH ROW
BEGIN

 Yapmak istediğiniz işlemler

END;

DELIMITER $$

Workbench Üzerinde Örnek Trigger Oluşturmak

Yukarıda örneğini verdiğim yapıda bir trigger oluşturmayı öğrendik şimdi bunu birlikte bir örnek yaparak anlayalım. Öncelikle işlem yapabilmemiz için birkaç tabloya ve veriye ihtiyacımız var. Hazır kullanmak istemedim birlikte bir tablo ve içine verilerimizi girersek daha faydalı olabilir kanaatindeyim. 



Bu yüzden ilk olarak cemreacar_tutorial adında bir schema oluşturuyorum. Siz de denemek için istediğiniz isimde bir tane oluşturabilirsiniz.

CREATE SCHEMA cemreacar_tutorial

Gelelim hikaye kısmına. Biz ufak bir araç kiralama şirketi veritabanına sahibiz diyelim. Veritabanımızı da bunun için aşağıdaki şekilde tasarlıyoruz.

CREATE TABLE mevcut_araclar (
 arac_ID INT NOT NULL auto_increment,
 PRIMARY KEY(arac_ID),
 marka VARCHAR(30),
 model VARCHAR(30),
 stok INT
);
CREATE TABLE kullanimdaki_araclar (
 arac_ID INT,
 FOREIGN KEY (arac_ID) REFERENCES mevcut_araclar(arac_ID),
 marka VARCHAR(30),
 model VARCHAR(30)
);

Ardından aşağıdaki şekilde birkaç veri girelim.

INSERT INTO mevcut_araclar (marka,model,stok) VALUES ("Volkswagen","Golf",2);
INSERT INTO mevcut_araclar (marka,model,stok) VALUES ("Volkswagen","Tiguan",1);
INSERT INTO mevcut_araclar (marka,model,stok) VALUES ("Renault","Symbol",7);
INSERT INTO mevcut_araclar (marka,model,stok) VALUES ("Renault","Megane",3);
INSERT INTO mevcut_araclar (marka,model,stok) VALUES ("Chevrolet","Captiva",4);

Şimdi esas konumuz olan Trigger oluşturma kısmına geldik. 
Oluşturduğumuz mevcut_araclar tablosundaki stok elimizdeki araçları belirtmekte. Bizim istediğimiz kullanımdaki_araclar tablomuza buradan bir araba girdiğinde elimizdeki araç sayısının da otomatik olarak azalması. Yani kısaca biz bir araç kiraladığımızda mevcut araçlardaki araç adedimizin otomatik düşmesini istiyoruz. Bunun için aşağıdaki şekilde bir Trigger oluşturalım.


DELIMITER $$
CREATE TRIGGER arac_stok
AFTER INSERT ON kullanimdaki_araclar
FOR EACH ROW 
BEGIN
UPDATE mevcut_araclar SET stok = stok - 1 WHERE arac_ID = new.arac_ID;
END $$
DELIMITER ;

Burada bir güncelleme işlemi gerçekleştirip elimizdeki araç adedini otomatik olarak güncellemiş oluyoruz. Şimdi gelin bunu test edelim ve araç adedinin değişip değişmediğini görelim.

Mevcut araçlarımızı bir listeleyelim.

MySQL TRIGGER için Listeleme

Buradan bir aracı kiralamak isteyelim o da arac_ID’si 4 olan Renault Megane olsun.

INSERT INTO kullanimdaki_araclar (arac_ID,marka,model) values(4,"Renault","Megane");


Aracımızı şu an kullanımdaki_araclar tablomuza ekledik. Tekrar mevcut_araclar tablomuzu listelediğimizde araç_ID’si 4 olan Renault Megane aracımızın adedinin düştüğünü görüyoruz.

MySQL TRIGGER Başarı ile Çalıştırıldı

SQL Trigger Kullanımı hakkındaki yazımı burada sonlandırıyorum. Yazımda eksik ya da yetersiz gördüğünüz kısımları yorum olarak belirtebilirsiniz. İyi Çalışmalar. 

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.