06 Şubat 2010

MySQL Trigger

Kategori: veritabanı — admin @ 07:49

Trigger(Tetikleme), MySQL 5 sürümü ile gelmiştir. Kısaca CREATE, UPDATE, DELETE gibi işlemlerin ardından önceden yazılmış sorguyu çalıştırması diyebiliriz.

Trigger’ı kullanabileceğiniz alanlar konusunda örnek vermek gerekirse; web sitenize sql injection yoluyla “saldırı” geldi ve tüm kayıtlarınız silinmeye çalışılıyor. Hemen yazdığınız trigger hızır gibi yetişerek tabloyu kitliyor ve sizi büyük bir zarardan kurtarıyor.

Sadece bu kadar mı dediğinizi duyuyor gibiyim. Ben trigger’ı yazdığım arkadaşlık sitesinde kullanmayı tercih ettim. Örnek olarak kullanıcı profiline yorum eklendiği zaman toplam yorum sayısının değerini “+1″ arttırıyorum.

SQL Kodu:

DELIMITER //
CREATE TRIGGER p_yorumhit
AFTER UPDATE ON profil
FOR EACH ROW BEGIN
        IF OLD.durum = 1 THEN
                UPDATE profil SET yorum=yorum+1 WHERE id=OLD.p_id;
        END IF;
END //
DELIMITER ;

Şimdi yazdığımız trigger’ı satır satır anlatmaya geldi.

    1. DELIMITER, işlem yapılacak kod aralığını belirtmek içindir.
    2. CREATE TRIGGER ile yeni bir trigger oluşturarak buna p_yorumhit adını veriyoruz.
    3. AFTER UPDATE ON profil, profil tablosunda güncelleme yapmadan önce,
    4. FOR EACH ROW BEGIN ile ilgili satır için BEGIN ile END arasındaki işlemi yapmasını istiyoruz.
    5. IF OLD.durum = 1 THEN, eğer update edeceğimiz ID’nin durum alanı 1 ise,
    6. profil tablosu yorum alanının değerini 1 arttır. (update’i mysql ile uğraşan herkes az çok bilir. açmaya gerek duymadım.)
    7. END IF; ile şartlandırmayı bitirip, END; ile sonlandırıyoruz ve DELIMITER // ile işlemi kapatıyoruz.

SQL alanlarının başına “OLD” yazmamızın nedeni daha önce oluşturulmuş bir satır üzerinde işlem yaptığımız içindir. UPDATE yerine CREATE kullansaydık daha önce satır yaratılmadığı için başına NEW eklememiz gerekecekti.

Not 1: Trigger, View ve Procedure MySQL 5 sürümünden sonra eklendiği için MySQL 4 ve alt sürümlerinde kullanamazsınız.

Not 2: Trigger’ı phpMyAdmin ile denemeyiniz, pMA 2.8 sürümünde DELIMITER problemi vardı. SQLyog ve Navicat yazılımlarını tavsiye ederim.

Not 3: Yazdığınız triggerları “SHOW TRIGGERS” ile görüntüleyebilir. “DROP triggeradi” ile kaldırabilirsiniz. Karşılaştığınız problemler olursa yorum olarak yazarsanız, yardımcı olurum.

Yorum Bulunamadı. »

Yorum Bulunamadı.

Bu yazıya yapılan yorumlar için RSS beslemeleri. Geri İzleme URL'si.

Yorum yap