MySQL Triggers (Tetikleyiciler) belirli bir tablo üzerinde işlem yapıldıktan sonra veya işlem yapılmadan önce (INSERT, UPDATE, DELETE) otomatik olarak çalıştırılan işlemler kümesidir. Tetikleyiciler yapılan işlem loglarının otomatik olarak aktarılması, yapılan işlem ile ilgili verilerin doğruluğunu kontrol etme açısından kullanımı önemlidir.
En büyük avantajı Tetikleyiciler ile yapabileceğiniz eylemleri php vb. ortamlarda yapmak için daha çok kod ve zaman ayıracağınız için Tetikleyicileri kullanarak daha sade bir kod yapısına sahip olabilir ve gereksiz yüklerden kaçınabilirsiniz.
Tetikleyici oluştururken öncelikle BEFORE veya AFTER parametresi ile tetiklemenin işleminin veri değişiminden öncemi yoksa sonramı gerçekleşeceğini belirtiyoruz.
Daha sonra hangi işlemin Tetikleyiciyi çalıştıracağınız belirliyoruz. INSERT | UPDATE | DELETE.
Kullanım betiği aşağıdaki gibidir :
1 2 3 4 |
CREATE TRIGGER Tetikleyici_Adı {BEFORE | AFTER} {INSERT | UPDATE| DELETE } ON Tablo_Adı FOR EACH ROW Tetikleyici_Gövdesi; |
Şimdi bir örnek oluşturalım, daha detaylı örneklere bir sonraki yazılarımda değineceğim.
Bu örneğimizde Kullanıcılar tablosu üzerinde UPDATE (Güncelleme) işlemi yapıldıktan sonra, kullanıcının Kullanıcıadını, ID numarasını, değişim tarihini ve yapılan işlemi başka bir log tablosuna kaydedeceğiz.
Tablolarımız :
1 2 3 4 5 6 7 |
-- Kullanıcılar Tablomuz : CREATE `kullanicilar` ( `id` INT NOT NULL AUTO_INCREMENT, `kullaniciadi` VARCHAR(45) NULL, `isim` VARCHAR(45) NULL, `soyisim` VARCHAR(45) NULL, PRIMARY KEY (`id`)): |
1 2 3 4 5 6 7 8 |
-- Kullanıcı Log Tablomuz CREATE TABLE kullanicilar_log ( id INT AUTO_INCREMENT PRIMARY KEY, kullaniciID INT NOT NULL, kullaniciadi VARCHAR(50) NOT NULL, degisikliktarihi DATETIME DEFAULT NULL, islem VARCHAR(50) DEFAULT NULL ); |
Şimdi işlemi yapacak Trigger’ı (Tetikleyici) oluşturuyoruz:
1 2 3 4 5 6 7 8 |
CREATE TRIGGER before_kullanicilar_log BEFORE UPDATE ON kullanicilar #Kullanıcı tablomuzda işlem yapılmadan önce FOR EACH ROW INSERT INTO kullanicilar_log #Kullanıcılar Log Tablomuza Ekle. SET islem = 'update', #İşlem Cinsi kullaniciID = OLD.id, #Değişiklikten önceki kullanıcıid kullaniciadi = OLD.kullaniciAdi, #Değişiklikten önceki Kullanıcıadı degisikliktarihi = NOW(); #Değişiklik Tarihi. |
Artık kullanicilar tabomuzda bir güncelleme işlemi yaptığımız zaman, kullanicilar_log tablomuza tetikleyicimizde tanımladığımız işlemleri gerçekleşecektir.
Ben kullanicilar tablomuza veri giriyorum ve aşağıdaki şekilde kullaniciAdi nı değiştiriyorum.
Yukarıdaki şekilde değişiklikleri yaptıktan sonra Tetikleyicimiz aşağıdaki şekilde kullanicilar_log tablomuza verileri işliyor.