MySQL'de Trigger Oluşturma ve Kullanımı rehberimizle veritabanlarınızda işlemleri daha otomatik hale getirebilir ve zaman kazanabilirsiniz Bu makalede MySQL trigger'larını nasıl oluşturacağınızı ve kullanacağınızı adım adım anlattık Hemen okuyun ve veritabanlarınızı optimize edin!

MySQL veritabanında trigger (tetikleyici) bir veritabanı olayı gerçekleştiği zaman otomatik olarak yürütülen bir SQL kod bloğudur. Trigger oluşturmak, veritabanındaki işlemleri otomatikleştirmenin pratik bir yoludur. Veritabanındaki işlemler tetiklenecek olay belirtilerek tanımlanır ve ardından tetiklenecek SQL kodu yazılır. Trigger'ın kullanımı, veritabanındaki olaylar gerçekleştiği zaman otomatik olarak işlemleri gerçekleştirerek veritabanındaki verileri güncellemeye veya değiştirmeye olanak tanır. Bu makalede MySQL'de trigger oluşturma ve kullanmanın pratik örnekleri verilmiştir.
1. Trigger Oluşturma
MySQL veritabanlarında trigger oluşturmak oldukça kolaydır. Yalnızca "CREATE TRIGGER" ifadesini kullanarak bir trigger oluşturabilirsiniz. Trigger ne zaman çalışacak belirtmek için, bir olay belirleyerek bu olayı tetikleyecek olan SQL kodunu yazmanız gerekiyor.
Trigger'lar, izlenen olay gerçekleştiğinde otomatik olarak harekete geçerek yazdığınız SQL kodunu çalıştırırlar. Bu nedenle, belirli bir işlem gerçekleştiğinde belirli bir kod bloğu yürütülmesi gereken durumlarda kullanışlıdır.
Bir trigger oluşturmak için 'CREATE TRIGGER' ifadesini ve hangi olayın izleneceğini belirtmek için 'BEFORE' veya 'AFTER' anahtar kelimesini kullanmanız gerekir. Ayrıca, hangi tablo ve sütunlarda tetikleneceğini belirtmeniz ve çalışacak SQL kodunu yazmanız gerekiyor.
2. Trigger Kullanımı
MySQL veritabanında trigger, belirli bir veritabanı olayı gerçekleştiğinde otomatik olarak çalışan SQL kod bloklarıdır. Trigger, veritabanına yeni bir kayıt eklendiğinde, güncellendiğinde veya silindiğinde tetiklenebilir.
Örneğin, bir before insert trigger kullanarak, veritabanına yeni bir kayıt eklendiğinde otomatik olarak işlem kaydı oluşturabilirsiniz. Benzer şekilde, after update trigger kullanarak bir kaydın güncellenmesi durumunda da bir işlem kaydı oluşturabilirsiniz. Ayrıca, before delete trigger kullanarak bir kaydın silinmesi durumunda da bir işlem kaydı oluşturabilirsiniz.
Trigger, veritabanı olayları gerçekleştiğinde otomatik olarak çalışır ve birçok işlem için kullanılabilir. Bu işlemler arasında veritabanı işlemlerinin izlenmesi ve işlem geçmişinin kaydedilmesi gibi çeşitli işlemler yer alabilir. Detaylı trigger oluşturma ve kullanım örnekleri için yukarıda yer alan örnekleri inceleyebilirsiniz.
2.1. Örnek: Before Insert Trigger
MySQL'de trigger oluşturmanın kullanımı oldukça kullanışlıdır. Örneğin, yeni bir kayıt eklendiğinde veya bir kayıt güncellendiğinde otomatik olarak bir işlem yapmak isteyebilirsiniz. Bu gibi durumlarda, before insert trigger kullanarak yeni bir kayıt eklendiğinde otomatik olarak bir işlem yapabilirsiniz.
Örnek olarak, 'urunler' tablosuna yeni bir kayıt eklendiğinde, urun_islem_gecmisi tablosuna yeni bir kayıt eklemek isteyebilirsiniz. Bunun için, 'CREATE TRIGGER' ifadesini kullanarak before insert trigger oluşturmanız gerekiyor. Trigger'a 'yeni_kayit_eklendi' adını verip, tetiklenecek olayı 'BEFORE INSERT ON urunler' olarak belirtebilirsiniz. Sonrasında tetiklenecek SQL kodunu yazarak trigger oluşturabilirsiniz.
CREATE TRIGGER yeni_kayit_eklendi |
---|
BEFORE INSERT ON urunler |
FOR EACH ROW |
BEGIN |
INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi) |
VALUES (NEW.urun_id, NOW(), 'ekleme'); |
END; |
Yukarıdaki kod bloğunda, NEW urun_id'si yeni eklenen kaydın id'sini temsil ediyor. NOW() fonksiyonu ise o andaki zamanı alıyor ve 'ekleme' operasyon tipini kayıt altına alıyor. Yani, urunler tablosuna yeni bir kayıt eklendiğinde, trigger otomatik olarak çalışacak ve urun_islem_gecmisi tablosuna yeni bir kayıt ekleyecektir.
2.1.1. Trigger Oluşturma
2.1.1. Trigger Oluşturma
MySQL'de bir trigger oluşturmak için 'CREATE TRIGGER' ifadesi kullanılır. Bu örnekte, veritabanına yeni bir kayıt eklendiğinde tetiklenecek bir before insert trigger yaratılacaktır. Bu trigger ile birlikte, urun_islem_gecmisi adlı başka bir tabloya yeni bir kayıt eklenecektir.
CREATE TRIGGER yeni_kayit_eklendiBEFORE INSERT ON urunlerFOR EACH ROWBEGIN INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi) VALUES (NEW.urun_id, NOW(), 'ekleme');END;
Bu trigger’ı oluşturduğumuzda, 'BEFORE INSERT ON' bölümünde belirtilen 'urunler' tablosunda bir kayıt eklendiğinde tetiklenecektir. Yeni kaydın özelliklerine erişmek için 'NEW' anahtar kelimesi kullanılacak ve urun_islem_gecmisi tablosuna yeni bir kayıt ekleyecektir. Bu örnekte, urun_id, islem_tarihi ve islem_tipi sütunlarına yeni bir kayıt eklenir. urun_id sütunu, yeni kayıtta bulunan ürün özelliğine karşılık gelirken islem_tarihi sütunu kaydın oluşturulduğu zamanı ifade eder. islem_tipi sütunu 'ekleme' anahtar kelimesiyle belirtildiğinde yeni kaydın ürün ekleme işlemi olduğu anlaşılacaktır.
BEFORE INSERT ON urunlerBEFORE INSERT ON urunler
Aşağıdaki kod bloğu, urunler tablosuna yeni bir kayıt eklendiğinde tetiklenecek bir before insert trigger örneğidir.
Kodu | Açıklama |
---|---|
CREATE TRIGGER yeni_kayit_eklendi BEFORE INSERT ON urunler FOR EACH ROW BEGIN INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi) VALUES (NEW.urun_id, NOW(), 'ekleme'); END; | Trigger oluşturma kod bloğu. Bu trigger, urunler tablosuna yeni bir kayıt eklenince urun_islem_gecmisi tablosuna bir kayıt eklemektedir. |
Yukarıdaki kodda, tetikleyici trigger adı, tetiklenecek olay (before insert on urunler), yapılacak işlem (insert into) ve eklenecek veriler belirtilmiştir. 'NEW' anahtar kelimesi, yeni kayıt verilerini ifade etmektedir. 'NOW()' fonksiyonu, o anki tarih ve saat bilgisini vermektedir.
Bu trigger, yeni bir kayıt eklendiğinde yalnızca bir kez çalışacaktır. 'FOR EACH ROW' ifadesi, her bir satır eklendiğinde trigger'ın çalışacağını belirtmektedir.
FOR EACH ROWKullanılan bir veritabanında bir trigger oluşturulduğunda, tetiklenecek olan olay belirlenmiş olmalıdır. Veri ekleme, güncelleme veya silme işlemi yapıldığında trigger tetiklenebilir. 'FOR EACH ROW' ifadesi, trigger'ın her bir satır için çalışmasını sağlar. Örneğin, bir veri eklendiğinde, trigger bu veri için çalışacak ve eklenen her bir satır için bir işlem gerçekleştirecektir. Bu işlem özellikle büyük veritabanları için oldukça yararlıdır, çünkü tüm veriler için tek bir trigger kullanmak yerine her bir veri satırı için ayrı ayrı tetikleyiciler oluşturulabilir.
Trigger'ın FOR EACH ROW seçeneği kullanılarak belirlenmesi, trigger'ın tek bir işlem yerine birden fazla işlem yapmasını sağlar. Bu verimli bir kullanım sağlayabilir. Örneğin, bir işlem geçmişi tablosuna veri eklenirken, aynı zamanda bir loglama işlemi de gerçekleştirilebilir. FOR EACH ROW ifadesi, trigger'ın her bir satır için çalışmasını sağladığından, her veriyle ilgili ayrı bir loglama işlemi yapılabildiği için oldukça kullanışlıdır.
BEGININSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi)The BEGIN statement marks the beginning of a trigger code block in MySQL. It is always followed by the END statement. All the SQL commands to be executed when a trigger is activated are written between BEGIN and END statements. The code inside this block can include SQL commands, variables, and control structures such as IF-THEN-ELSE statements.
One important thing to keep in mind while writing the trigger code block is that it should end with a semicolon (;) before the END statement. If this syntax is not followed, MySQL will throw an error.
Additionally, the trigger code block can access both the old and new values of the row that triggered the event. The old value is accessed using the keyword 'OLD' and the new value is accessed using the keyword 'NEW'. This feature allows for creating triggers that perform a variety of functions such as auditing, logging, and data validation.
INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi) kod bloğu, veritabanında bir kaydın eklenme, güncellenme veya silinme durumunda tetiklenen ve urun_islem_gecmisi tablosuna kayıt eklemek için kullanılan bir SQL ifadesidir.
urun_id, islem_tarihi ve islem_tipi sütunlarına karşılık gelen değerleri, yeni eklenen, güncellenen veya silinen kayıdın verilerinden alır. Bu sayede urun_islem_gecmisi tablosuna hangi ürünün, ne zaman ve hangi işlemle eklendiği, güncellendiği ya da silindiği bilgileri eklenmiş olur.
sütun adı | açıklama |
---|---|
urun_id | Hangi ürün için işlem yapıldığını belirtir. |
islem_tarihi | İşlemin ne zaman yapıldığını belirtir. |
islem_tipi | Yapılan işlemin türünü belirtir (ekleme, güncelleme, silme). |
urun_islem_gecmisi tablosu, ürünler tablosuna yapılan işlemlerin kaydedildiği bir geçmiş tablosudur. Bu sayede, ürünler tablosunda yapılan her işlem, urun_islem_gecmisi tablosunda kaydedilir ve ürünün geçmişi takip edilebilir hale gelir.
VALUES (NEW.urun_id, NOW(), 'ekleme');'VALUES (NEW.urun_id, NOW(), 'ekleme');' trigger kod bloğunda başka bir tabloya kayıt eklenebilmesini sağlar. Bu örnekte, veritabanına yeni bir kayıt eklendiğinde, 'urun_islem_gecmisi' tablosuna yeni bir kayıt eklenir. Eklenen kayıt, yeni eklenen ürünün ID'si, işlem tarihi (current time) ve işlem tipi 'ekleme' bilgilerini içerir. Bu bilgiler 'urun_islem_gecmisi' tablosunda raporlama için kullanılabilir.
END;MySQL'de trigger'lar, veritabanındaki olayların gerçekleştiği durumlarda otomatik olarak çalışan SQL kod bloklarıdır. Bu kod blokları farklı örneklerde kullanılabilir ve bunların tetiklenmesi için belirli olaylar gerçekleşmelidir. Trigger'lar, veritabanı yönetimi için oldukça önemlidir ve farklı senaryolar için pratik çözümler sunarlar.
Bu makalede, MySQL'de trigger oluşturma ve kullanma konusu ele alınmıştır. Trigger oluşturma için 'CREATE TRIGGER' ifadesi kullanılmaktadır. Trigger'ların kullanımı için ise, olayların gerçekleşmesi beklenir ve trigger bu durumda otomatik olarak çalışır. Veritabanına yeni kayıt eklendiğinde, güncellendiğinde veya silindiğinde trigger'lar kullanılabilir.
Örnekler üzerinden trigger oluşturma ve kullanma konuları daha iyi anlaşılabilir. Before insert, after update ve before delete trigger'ları örnekleri, farklı senaryolar için pratik çözümler sunarlar. Örneğin, bir kayıt eklendiğinde veya silindiğinde, bu durumun otomatik olarak bir tabloya kaydedilmesi gerektiğinde, trigger'lar oldukça kullanışlı olabilir.
MySQL veritabanı yönetimi konusunda çalışanlar, trigger'ları kullanarak veritabanında otomatik işlemler gerçekleştirebilirler. Bu işlemler, manuel olarak yapılması gereken işlemleri otomatik hale getirebilir ve veritabanı yönetimi için oldukça pratik bir çözüm sunarlar.
Bu makalede, MySQL veritabanında trigger oluşturma ve kullanımı konuları ele alınmıştır. Trigger'ların kullanımı, veritabanı yönetimi için oldukça önemli bir konudur ve pratik çözümler sunarlar. Trigger'ları, belirli senaryolar için kullanarak farklı otomatik işlemler gerçekleştirebilir ve veritabanı yönetimini kolaylaştırabilirsiniz.
Siz de MySQL veritabanı yönetimi konusunda çalışıyorsanız, trigger'ları kullanarak veritabanınızda otomatik işlemler gerçekleştirebilirsiniz. Bu sayede zamandan tasarruf edebilir ve veritabanı yönetimini daha pratik bir hale getirebilirsiniz.
END;
2.1.2. Trigger Kullanımı
Urunler tablosuna yeni bir kayıt eklendiğinde oluşturulan before insert trigger otomatik olarak çalışacak ve urun_islem_gecmisi tablosuna bir kayıt ekleyecektir. Yeni kaydın urun_id'si, kaydın eklenme tarihi ve islem_tipi (ekleme) gibi bilgiler trigger tarafından otomatik olarak kaydedilecektir.
Bu şekilde oluşturulan trigger sayesinde, eklenen kayıtların izlenebilmesi ve izlenen kayıtların raporlanabilmesi mümkün hale gelir. Bu tür izlemeler özellikle büyük ölçekteki veritabanları için oldukça önemlidir.
2.2. Örnek: After Update Trigger
MySQL'de After Update Trigger, veritabanı kayıtlarının güncellendiğinde otomatik olarak yürüyen bir kod bloğudur. Bu trigger sayesinde, örneğin bir ürün bilgisi güncellendiğinde, bu güncellemenin yapıldığı tarihi ve neyin güncellendiğini içeren bir log kaydı tutulabilir.
After Update Trigger oluşturmak için, 'CREATE TRIGGER' ifadesi kullanılır ve tetiklenecek olay olarak 'AFTER UPDATE' belirtilir. Tetiklenecek SQL kodu, BEGIN ve END blokları arasında yazılır. Örneğin, urunler(tablo adı) tablosundaki bir kayıt güncellendiğinde, urun_islem_gecmisi(tablo adı) tablosunda bir log kaydı oluşturan bir After Update Trigger şu şekilde oluşturulabilir:
CREATE TRIGGER kayit_guncellendiAFTER UPDATE ON urunlerFOR EACH ROWBEGIN INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi) VALUES (OLD.urun_id, NOW(), 'guncelleme');END;
Bu trigger sayesinde, urunler tablosu güncellendiğinde urun_islem_gecmisi tablosu da güncellenir. Her kayıt güncellemesi, urun_islem_gecmisi tablosuna bir log kaydı eklenir. Bu log kaydı, ürün güncellemesinin tarihini ve yapılan değişikliğin ne olduğunu gösterir. Bu sayede, veritabanında yapılan güncellemelerin daha iyi takip edilmesi sağlanabilir.
2.2.1. Trigger Oluşturma
Veritabanında kaydı güncelleme işlemi gerçekleştiğinde tetiklenecek olan 'after update trigger' örneğine ilişkin olarak trigger oluşturma işlemi aşağıdaki gibidir:
CREATE TRIGGER kayit_guncellendi | AFTER UPDATE ON urunler | FOR EACH ROW |
BEGIN | ||
INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi) | ||
VALUES (OLD.urun_id, NOW(), 'guncelleme'); | ||
END; |
Yukarıdaki örnek, urunler tablosunda herhangi bir kayıt güncellendiğinde tetiklenecek olan bir after update trigger örneğidir. Trigger, urun_islem_gecmisi tablosuna güncellenen kayıt hakkında bir girdi ekleyecektir. 'AFTER UPDATE' ifadesi, trigger'ın güncelleme işlemi sonrasında tetikleneceğini belirtir. 'FOR EACH ROW' ifadesi, her bir satırda trigger'ın tetikleneceğini belirtir. Trigger'da 'OLD' kullanarak eski verileri seçebiliriz. Bu durumda, trigger güncellenen kaydın eski verilerine erişebilecektir.
AFTER UPDATE ON urunlerUrunler tablosundaki bir kayıt güncellendiğinde, ilgili trigger otomatik olarak çalışır. Trigger'ın yürüttüğü SQL kodu, veritabanı tablosuna herhangi bir değişiklik olduğunda çalışacak şekilde ayarlanmıştır. Bu nedenle, kaydı güncellemek için kullanılan SQL sorgusu tetiklendiğinde, trigger otomatik olarak çalışacak ve urun_islem_gecmisi tablosundaki ilgili kayda bir güncelleme işlemi kaydedecektir.
- AFTER UPDATE ON urunler tetikleyicisi, kayıtların güncellendiği durumlar için kullanılabilir.
- Veritabanına yapılan her güncelleme işlemi, urun_islem_gecmisi tablosuna kaydedilecektir.
- Bu durumda, güncelleme işleminin gerçekleştiği urun_id, islem_tarihi ve islem_tipi verileri urun_islem_gecmisi tablosuna eklenecektir.
'FOR EACH ROW' ifadesi, trigger'ın her satır üzerinde çalışacağını belirtir. Bu ifade kullanılmadığında trigger, olay gerçekleştiği zaman sadece bir kere çalışır. Ancak, 'FOR EACH ROW' ifadesi kullanıldığında trigger, olay her satırda gerçekleştiğinde ayrı ayrı çalışır. Bu nedenle, her satırda farklı bir işlem yapılması gerekiyorsa bu ifade kullanılmalıdır.
BEGINifadesi, bir trigger oluştururken tetiklenecek SQL kodu bloğunu başlatmak için kullanılır. BEGIN ifadesinden sonra SQL kodu bloğu yazılır ve blok END ifadesiyle sonlandırılır. BEGIN ve END ifadeleri arasındaki SQL kodları, trigger tetiklendiğinde otomatik olarak yürütülür. BEGIN ifadesi, trigger oluşturma ve kullanımında önemli bir role sahiptir. Aşağıdaki tabloda 'INSERT INTO' ve 'VALUES' ifadeleri kullanılarak bir before insert trigger oluşturulması için bir örnek verilmiştir.
Başlık 1 | Başlık 2 | Başlık 3 |
---|---|---|
1. Hücre | 2. Hücre | 3. Hücre |
1. Hücre | 2. Hücre | 3. Hücre |
Örneğin, urunler tablosuna bir kayıt eklendiğinde, urun_islem_gecmisi tablosuna otomatik olarak bir kayıt eklenmesini sağlayan before insert trigger örneği aşağıda verilmiştir:
CREATE TRIGGER yeni_kayit_eklendiBEFORE INSERT ON urunlerFOR EACH ROWBEGIN INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi) VALUES (NEW.urun_id, NOW(), 'ekleme');END;
Bu trigger tetiklendiğinde, NEW.urun_id değeri ve güncel tarih otomatik olarak urun_islem_gecmisi tablosuna eklenir. BEGIN ifadesi, veritabanı işlemlerinde oldukça önemlidir. Bu nedenle, trigger oluşturulurken ve kullanılırken dikkatli bir şekilde kullanılmalıdır.
INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi)INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi) ifadesi, yeni bir kayıt eklendiğinde, güncellendiğinde veya silindiğinde tetiklenecek trigger fonksiyonlarında sıklıkla kullanılır.
urun_islem_gecmisi tablosu, urunler tablosundaki her bir işlemi takip eder ve ilgili verileri urun_id, işlem tarihi ve işlem tipi olarak kaydeder. Bu sayede, urunler tablosunda gerçekleşen her bir işlemin tarih ve tip bilgileri takip edilebilir.
Alan Adı | Veri Türü | Açıklama |
---|---|---|
urun_id | Int | Urunler tablosunda eklenecek, güncellenecek veya silinecek urunun benzersiz kimlik numarası |
islem_tarihi | Timestamp | Urun işlemi gerçekleştirildiği tarih ve zaman |
islem_tipi | Varchar | Urun işleminin türü (ekleme, güncelleme veya silme) |
Bu tablo, urunler tablosundaki verilerin takibi için oldukça yararlıdır ve veritabanındaki işlemleri kontrol altında tutmak için kullanılabilir. Ayrıca, tablodaki veriler, urunler tablosundaki her bir işlem için ayrıntılı raporlar hazırlamak için kullanılabilir.
VALUES (OLD.urun_id, NOW(), 'guncelleme');'VALUES (OLD.urun_id, NOW(), 'guncelleme')' ifadesi, after update trigger tetiklendiğinde yeni bir kayıt oluşturmak ve kayıt güncellemesi işlemi hakkında bilgi toplamak için kullanılır. Bu örnekte, urunler tablosundaki bir kayıt güncellendiğinde, trigger otomatik olarak çalışacak ve urun_islem_gecmisi tablosuna bir kayıt ekleyecektir. Bu kayıt, urun_id, kayıt tarihi ve işlem tipi bilgilerini içerecektir.
'VALUES' ifadesi, bir kayıt eklemek için verilerin listesi olarak belirtilir. 'OLD.urun_id', trigger'ın çalıştığı tablodaki güncellenen kaydın id'sini alır. 'NOW ()', kayıt eklenme ya da güncellenme anındaki tarihi belirler. 'guncelleme', trigger'ın tetiklendiği işlem tipini belirtir.
Özetle, bu trigger, urunler tablosundaki bir kayıt güncellendiğinde otomatik olarak bir kayıt ekleme işlemi gerçekleştirir ve bu işlemin detaylarını urun_islem_gecmisi tablosunda saklar.
END;MySQL'de trigger kullanımı, veritabanı işlemlerinde kolaylık sağlamaktadır. Bu işlev, bir olayın gerçekleştiği anda otomatik olarak yürütülen bir SQL kod bloğudur. Trigger oluşturma ve kullanmanın pratik örnekleri aşağıda detaylı bir şekilde verilmiştir. Before insert, after update ve before delete tetikleyicileri örnek olarak verilebilir. Bu tetikleyicilerin amacı, olası bir veri kaybını önlemek ve veritabanı işlemlerinde kayıt altına almaktır. Bu sayede daha sonra yapılan işlemlerde kaydedilen veriler, raporlama ve analizlerde kullanılabilir.
2.2.2. Trigger Kullanımı
"2.2.2. Trigger Kullanımı" başlığı altındaki örneğe göre, Urunler tablosundaki bir kayıt güncellendiğinde, trigger otomatik olarak çalışacak ve urun_islem_gecmisi tablosuna bir kayıt ekleyecektir. Bu sayede, urun_islem_gecmisi tablosu, kaydın ne zaman ve ne ile güncellendiğine dair bilgiyi tutacaktır.
Örneğin, bir ürünün fiyatı güncellendiği zaman, trigger çalışacak ve urun_islem_gecmisi tablosuna yeni bir kayıt ekleyecektir. Bu kayıtta, güncellenen ürünün ID'si, güncelleme tarihi ve güncelleme işlemi yer alacaktır. Böylece, veritabanı yöneticisi veya ilgili departman, ürün fiyatının ne zaman ve kim tarafından güncellendiğini kolayca takip edebilecektir.
2.3. Örnek: Before Delete Trigger
Veritabanı üzerinde silme işlemi gerçekleştirildiğinde tetiklenecek olan bir before delete trigger, işlemin her anını kaydetmek için oldukça önemlidir. Bu sayede veritabanı üzerinde yapılan operasyonlar daha detaylı olarak takip edilebilir. Örneğin bir ürün veritabanı üzerinden silindiğinde, bu işlem trigger ile tetiklenerek ürün_islem_gecmisi tablosuna bir kayıt eklenir. Böylelikle silinen ürünün hangi tarihte hangi kullanıcı tarafından silindiği bilgisi kaydedilmiş olur.
Before delete trigger oluşturmak için ilk önce 'CREATE TRIGGER' ifadesi kullanılmalıdır. Daha sonra tetiklenecek tablo ve olay belirtilir. Trigger'ın tetiklenmesi için kullanılacak SQL kod bloğu da burada belirtilir. Örneğin, urunler tablosunda bir kayıt silindiğinde before delete trigger'ı kullanılarak urun_islem_gecmisi tablosuna bir kayıt ekleyebiliriz. Bu sayede silinen ürünün ismi, fiyatı, kategorisi gibi bilgilerin yanı sıra hangi kullanıcı tarafından ve hangi tarihte silindiği de kaydedilecektir.
2.3.1. Trigger Oluşturma
Veritabanında kayıt silindiği zaman trigger otomatik olarak çalışacak ve urun_islem_gecmisi tablosuna silinen kaydın bilgilerinin kaydedilmesi amaçlanacaktır. Bu durumda öncelikle, bir before delete trigger oluşturulacaktır. Trigger oluşturmak için 'CREATE TRIGGER' ifadesi kullanılır.
Örneğin; 'kayit_silindi' isimli bir trigger oluşturulacaktır ve tetiklenecek olay olarak 'urunler' tablosu için before delete belirlenecektir. Ayrıca, FOR EACH ROW ifadesi kullanılarak, her silinecek kayıt için trigger'ın ayrı ayrı çalışması sağlanacaktır. Son olarak, BEGIN-END bloğu içerisine 'urun_islem_gecmisi' tablosuna kayıt eklenmesi için gerekli SQL kodu yazılacaktır. Örneğin;
CREATE TRIGGER kayit_silindiBEFORE DELETE ON urunlerFOR EACH ROWBEGIN INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi) VALUES (OLD.urun_id, NOW(), 'silme');END;
Bu şekilde, 'urunler' tablosundan bir kayıt silindiği zaman trigger otomatik olarak çalışacak ve urun_islem_gecmisi tablosuna kayıt ekleyerek ilgili işlem kaydı tutulmuş olacaktır.
BEFORE DELETE ON urunlerVeritabanındaki kayıtları silmek için DELETE
komutu kullanılır. BEFORE DELETE
trigger'ı, kayıtlar silinmeden önce tetiklenir ve eylemin gerçekleştirilip gerçekleştirilmeyeceğine karar verir. Bu, veritabanı yöneticilerinin hatalı kayıtları silebilecekleri durumlarda bir önlem sağlar.
Örneğin, bir ürün kategorisindeki tüm ürünleri silmek istediğinizde, urunler
tablosundan tüm kayıtları silmek yerine yanlışlıkla sadece bir ürünü sildiğinizde, bu trigger'ı kullanarak yanlışlıkla yapılan silme işlemi önlenir. Trigger tetiklendiğinde, urun_islem_gecmisi
tablosuna silinen kaydın bilgileri eklenir.
'FOR EACH ROW' ifadesi, trigger'ın her satır için ayrı ayrı çalışmasını belirler. Yani bir trigger, herhangi bir tablo veya görünümdeki her satır için ayrı ayrı çalıştırılabilir. Bu nedenle, 'FOR EACH ROW' ifadesinin kullanımı, trigger'ın kullanımındaki en önemli özelliklerden biridir.
Ayrıca, 'FOR EACH ROW' ifadesi, bir trigger'ın çalışması sırasında etkilenen satırın eski ve yeni değerlerine erişmeyi sağlar. Bu, bir güncelleme trigger'ı ile bir satırın eski ve yeni sürümlerini karşılaştırmak veya bir silme trigger'ı ile silinen bir satırın verilerini saklamak için kullanılabilir.
Özellikle, büyük ölçekli veritabanlarında 'FOR EACH ROW' ifadesinin kullanımı, veritabanı yönetimi için oldukça önemlidir. Veritabanındaki herhangi bir olayı otomatik olarak işleyen bir trigger, veritabanı yönetiminde büyük bir kolaylık sağlayabilir ve verilerin doğru, tutarlı ve güvenli bir şekilde saklanmasını sağlayabilir.
BEGINkomutu, trigger'da tetikleyici başladığında yürütülecek SQL kod bloğunu belirler. BEGIN komutu ile yapılan değişiklikler, tetikleyici etkisini kaybettiğinde geri alınabilir. BEGIN komutu, tetikleyicinin anahtar kelime gruplarından biridir ve tetikleyici kullanımında önemli bir role sahiptir. Trigger tarafından tetiklenen işlemlerin yürütülmesi sırasında BEGIN komutu, SQL işlemlerinin düzenlenmesinde ve kontrol edilmesinde yararlıdır. Bu sayede, tetikleyicinin istenmeyen sonuçlara neden olması önlenmiş olur. BEGIN komutunun kullanımı, trigger oluşturma ve kullanımı için oldukça önemlidir ve güçlü bir etki sağlar.
INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi)Urün işlem geçmişi tablosuna kayıt eklemek için kullanılan SQL kod bloğu "INSERT INTO urun_islem_gecmisi (urun_id, islem_tarihi, islem_tipi)" şeklindedir. Bu kod bloğunun yürütülmesi sonucu, ürün ID'si, işlem tarihi ve işlem tipi belirtilen kayıt için urun_islem_gecmisi tablosuna eklenecektir.
Bu örnekte, trigger'ın kullanımı ile urun_islem_gecmisi tablosunda her bir işlem için otomatik olarak bir kayıt oluşturulmaktadır. Bu sayede, urunler tablosundan silinen, güncellenen veya eklenen her bir kayıt için izlenebilir bir işlem geçmişi oluşturulmuş olur.
Alan Adı | Açıklama |
---|---|
urun_id | İşlem yapılan ürünün ID'si |
islem_tarihi | İşlemin gerçekleştirildiği tarih ve saat |
islem_tipi | İşlem tipi (ekleme, güncelleme veya silme) |
Bu şekilde, MySQL trigger kullanarak, veritabanındaki olaylar için otomatik işlem yapılabilmektedir.
VALUES (OLD.urun_id, NOW(), 'silme');'VALUES (OLD.urun_id, NOW(), 'silme');' ifadesi, trigger'ın tetiklendiği durumda urun_islem_gecmisi tablosuna yeni bir kayıt eklemek için kullanılır. Bu örnekte, veritabanındaki bir kayıt silindiğinde tetiklenecek olan bir before delete trigger'ı uygulanmıştır. Trigger tetiklendiğinde, urun_islem_gecmisi tablosuna kaydın ID'si, işlem tarihi ve işlem tipi (silme) yazılır. Böylece kayıt silindiği zaman hemen bir işlem geçmişi kaydı oluşturulur.
END;MySQL trigger'ları sayesinde veritabanı olayları takip edilerek, otomatik olarak belirlenen SQL işlemleri gerçekleştirilebilir. Yukarıdaki örneklerde görüldüğü gibi, trigger'lar oluşturmak ve kullanmak oldukça kolaydır. Trigger'lar, özellikle veritabanlarında yapılan işlemlerin kaydedilmesi gibi tarihsel takiplerde oldukça kullanışlıdır.
Yukarıdaki örneklerde de görüldüğü gibi, trigger'lar veritabanlarında yapılan işlemleri takip etmek için sıkça kullanılan bir yöntemdir. Trigger oluşturmak oldukça basit olmakla birlikte, oluşturulan trigger'ların doğru bir şekilde çalıştığından emin olmak oldukça önemlidir. Bu nedenle, trigger'lar önceden test edilmeli ve gerektiğinde düzenlenerek veritabanına uygulanmalıdır.
Tüm bunların yanı sıra, trigger'ların takibi daha fazla veri oluşmasına neden olabilir. Trigger'ların doğru bir şekilde çalıştığından emin olmak için veritabanı yöneticileri sistemlerini düzenli olarak tarayarak kapasite sorunlarına karşı önlem almalıdır.
Bu yazımızda MySQL trigger'larını kullanarak örnekler verdik. Trigger konusunda daha fazla bilgi edinmek için MySQL resmi sitesini ziyaret edebilirsiniz.
Sonuç olarak, trigger'ların kullanımı veritabanlarındaki işlemleri takip etmek açısından oldukça önemlidir. Yukarıda verilen örneklerde olduğu gibi, trigger'ların kullanımı oldukça basitleştirilmiştir. Uygun şekilde kullanıldığında, veritabanlarının tarihsel kayıtlarının takibi daha kolay ve daha verimli hale gelebilir.
END
2.3.2. Trigger Kullanımı
Bu örnekte, Urunler tablosundan bir kayıt silindiğinde trigger otomatik olarak tetiklenir. Trigger, urun_islem_gecmisi tablosuna silinen kaydın bilgilerini ekler. Böylece, urunler tablosundan silinen kayıt hakkında bir kayıt oluşturulur ve herhangi bir zamanda geriye dönük olarak takip edilebilir.
Aşağıdaki tablo, urun_islem_gecmisi tablosundaki bir kaydın neler içerebileceğine dair bir örnek sunmaktadır:
urun_islem_gecmisi | |
---|---|
islem_id | 1 |
urun_id | 234 |
islem_tarihi | 2021-09-15 14:23:55 |
islem_tipi | silme |
- islem_id: Her bir işlem için benzersiz bir kimlik numarasıdır.
- urun_id: Silinen ürünün kimliğini içerir.
- islem_tarihi: İşlem yapılan zamanı içerir.
- islem_tipi: Yapılan işlemin tipini belirtir (silme, ekleme veya güncelleme).
Trigger kullanmanın bu örneği sayesinde, veritabanındaki değişikliklerin tam olarak nasıl yapıldığı ve ne zaman yapıldığı takip edilebilir.