Mysql Event,
Bir veya birden fazla sql ifadesinin belli bir tarih aralığında otomatik olarak çalıştırılmasınısağlayan olaylara Event denir. Yani bir sql scriptinin bu; insert ,update ,delete,stored procedure,trigger vs olabilir belirli bir tarih ve saatte otomatik olarak çalışıtırılmasınısağlar.Bir nevi linux üzerinde ki cron mantığı ,windows üzerinde de zamanlanmış görevoluşturmak gibi.Event özelliğini MySQL 5.1.12 versiyonu ile kazanmıştır.Mysql’in kurulumunda event özelliği default olarak kapalı gelir. Event özelliğinin durumunugörmek için;SELECT @@event_scheduler;
komut satırını çalıştırdığınızda size OFF olduğunu söyleyecektir. Tabi ki açmamış iseniz.Event özelliğini aktif hale getirmek için ise;SET GLOBAL event_scheduler = 1;
komut satırını çalıştırmanız gerekmektedir. Bu komut satırını çalıştırdıktan sonra iseSELECT @@event_scheduler; derseniz ON olduğunu görürsünüz.Syntax:
CREATE[DEFINER = { user | CURRENT_USER }]EVENT [IF NOT EXISTS]event_name ON SCHEDULEAT timestamp [+ INTERVAL interval]| EVERY interval[STARTS timestamp [+ INTERVAL interval]][ENDS timestamp [+ INTERVAL interval]][ON COMPLETION [NOT]PRESERVE][ENABLE | DISABLE | DISABLE ON SLAVE][COMMENT ‘comment’]DO sql_statement;
INTERVAL değeri olarakta:
{YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
değerlerini kullanabiliriz.Örnek 1:
Bu örnekte 5 saniye de bi kronetmetre isimli tablomuza günün tarih vesaatini insert eden bir event yazalım.Event’imizin ismide kronemetre olsun.CREATE EVENT kronometreON SCHEDULEEVERY 5 secondCOMMENT ‘5 sn de bir insert’DOinsert into kronometre (zaman) values (now());
Bu eventimizi çalıştırdıktan sonra kronetmetre tablosunun zaman kolonunanow() fonksiyonu ile günün tarih ve saatini insert etmiş olacağız. Tabii bu eventinçalışabilmesi için Mysql serverınızda Event işleminin aktif olması gerekmektedir.Mysql Event 1 isimli makalemde nasıl aktif yapacağımızı anlatmıştım.Örnek 2:
Bu örneğimizde de belli bir tarih ve zamanda tek bir insert işlemi yaptıralım.CREATE EVENT tek_insertON SCHEDULE AT ‘2009-03-24 13:20:00′DO INSERT INTO enevt_test (zaman) VALUES (NOW());
2009-03-24 13:20:00 tarih ve saati geldiğinde eventimiz çalışmış olacak venow() fonksiyonu ile günün tarih ve saatini event_test tablomuzun zaman kolonuna insertetmiş olacak.Bu even sadece 2009-03-24 13:20:00 tarihinde 1 defa çalışacaktır.Örnek 3:
Bu örneğimizde de 5 gun sonrası için bir drop işlemi yaptıralım.CREATE EVENT `Drop_Yap`ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAYDO DROP TABLE event_test;
Drop_Yap isimli Eventimiz Current_timestamp’e (bu günün tarihine) 5 gün ekleyecekve hedef tarih geldiğinde de event_test tablosunu drop edecektir.Örnek 4:
Bu örneğimizde de belli bir tarih aralığı kısıtı koyalım ve diyelim kibu tarih aralığında her 5 saniyede bir insert işlemi yap.CREATE EVENT tarih_aralikliON SCHEDULE EVERY 5 SECONDSTARTS TIMESTAMP ‘2009-03-24 16:00:00′ENDS TIMESTAMP ‘2009-03-30 16:00:00′ON COMPLETION PRESERVECOMMENT ‘Bir hafta sureyle her 5 saniye de bir calis’DO INSERT INTO event_test (zaman) VALUES (CURRENT_TIMESTAMP, 10);
2009-03-24 16:00:00 ve 2009-03-30 16:00:00 tarih aralığında her 5 saniye de bir çalışıpevent_test tablosunun zaman kolonuna current_timestamp’i yani günün tarihve saatini insert yapar. Bitiş tarih ve saati geldiğinde ise çalışması sona erer.Örnek 5:
Bu son örneğimizde de her iki saniyede bir yazdığımız procedure yiçağıran bir event yazalımCREATE EVENT procedure_cagirON SCHEDULE EVERY 2 SECONDCOMMENT ‘2 sn de sp cagiracak’DO CALL testProcedure();
procedure_cagir isimli eventimiz her 2 saniyede bir testProcedure() isimlistored proceduru çalıştıracaktır.Tüm bu yazdığımız eventleri görmek için ise;SELECT * FROM mysql.event;sorgusunu çalıştırmamız yeterli olacaktır.
Tayfur BÖLERDatabase Administratorhttp://www.mysqlsupport.net