MySQL olay zamanlayıcısı (event scheduler) periyodik olarak veya sadece 1 kez tetiklenebilir olayları planlamak için kullanılır. Olay zamanlayıcısı Mysql’e 5.1.6 sürümünde eklenmiştir. Dolayısıyla alt sürümlerde desteklenmez.

event-scheduler

Olay zamanlayıcısını Unix’te bulunan cron job (zamanlanmış görev) gibi düşünebilirsiniz.

Varsayılan olarak olay zamanlayıcısı devre dışıdır. Yine de kontrol etmek isterseniz:

SHOW PROCESSLIST;

show-process-1

Sorgusunu çalıştırın. Eğer sorgu sonucunda event_scheduler görüyorsanız olay zamanlayıcısı aktiftir. Göremiyorsanız devre dışıdır. Olay zamanlayıcısını etkinleştirmek için:

SET GLOBAL event_scheduler = ON;

Sorgusunu çalıştırabilirsiniz. Olay zamanlayıcısını etkinleştirdikten sonra SHOW PROCESSLIST sorgusunu tekrar çalıştırırsanız işlem listesinde event_scheduler kısmını göreceksiniz.

show-process-2

Olay zamanlayıcısını kapatmak için:

 SET GLOBAL event_scheduler = OFF;

Sorgusunu çalıştırabilirisiniz.

Yeni bir etkinlik oluşturmak ve planlamak için CREATE EVENT söz dizimi kullanılır.

CREATE EVENT ekle
ON SCHEDULE at current_timestamp
DO
insert into veri(metin,tarih) values('Event testi',NOW());

Buradaki “ekle” olayımızın adıdır. “ON SCHEDULE” sözcüğünden sonra kullandığımız “at” olayı sadece bir kere çalıştırır. Olayı belirli zaman aralıklarında çalıştırmak için “every” kullanılır. ” current_timestamp” şu anki zamanı temsil eder. “Do” sözcüğünden sonra da çalıştırılacak olan sql cümleciği yazılır.

Olay zamanlayıcısı çeşitli ayarlarla oluşturulabilir.

Belirli bir tarih/zamanda olayı bir kez çalıştırmak: at “2015-02-14 20:15:10” (YYYY-MM-DD HH:MM:SS)

CREATE EVENT temizle
ON SCHEDULE at '2016-01-01 00:00:00'
DO
delete from mesajlar where mesajTarih < DATE_SUB(NOW(), INTERVAL 1 WEEK);

Yukarıda oluşturduğumuz “temizle” isimli olay 2016 yılbaşı gecesi sadece bir kez çalışacaktır.