### MySQL’de Olaylar (Events)
MySQL, tekrarlayan ve zamanlanmış görevleri otomatikleştirmek için **Olaylar (Events)** özelliğini sunar. Bu özellik, özellikle SQL tabanlı görevler için cron benzeri bir işlevsellik sağlar. Bu yazıda, MySQL’de olayların nasıl oluşturulacağını, yönetileceğini ve kullanılacağını ele alacağız.
#### 1. Olay Scheduler’ı Etkinleştirme
Olayların çalışması için öncelikle olay scheduler’ın etkinleştirilmesi gerekir. Olay scheduler’ın durumunu kontrol etmek ve etkinleştirmek için aşağıdaki komutlar kullanılır:
“`sql
SHOW VARIABLES WHERE variable_name=’event_scheduler’;
“`
Eğer sonuç `OFF` ise, olay scheduler’ı etkinleştirmek için:
“`sql
SET GLOBAL event_scheduler = ON;
“`
#### 2. Olay Oluşturma
Olaylar, belirli bir zaman aralığında veya belirli bir tarihte otomatik olarak çalışacak şekilde planlanabilir. Aşağıda, iki farklı olay örneği bulunmaktadır:
##### Örnek 1: Günlük Olay
Bu olay, her gün belirli bir saatte çalışır ve 7 günden eski mesajları siler:
“`sql
DROP EVENT IF EXISTS `delete7DayOldMessages`;
DELIMITER $$
CREATE EVENT `delete7DayOldMessages`
ON SCHEDULE EVERY 1 DAY STARTS ‘2023-10-01 00:00:00’
ON COMPLETION PRESERVE
DO BEGIN
DELETE FROM theMessages
WHERE DATEDIFF(NOW(), updateDt) > 6; — 7 günden eski kayıtları siler
END$$
DELIMITER ;
“`
##### Örnek 2: Her 10 Dakikada Bir Çalışan Olay
Bu olay, her 10 dakikada bir çalışır ve 1 haftadan eski mesajları siler:
“`sql
DROP EVENT IF EXISTS `Every_10_Minutes_Cleanup`;
DELIMITER $$
CREATE EVENT `Every_10_Minutes_Cleanup`
ON SCHEDULE EVERY 10 MINUTE STARTS ‘2023-10-01 08:08:08’
ON COMPLETION PRESERVE
DO BEGIN
DELETE FROM theMessages
WHERE TIMESTAMPDIFF(HOUR, updateDt, NOW()) > 168; — 1 haftadan eski kayıtları siler
END$$
DELIMITER ;
“`
#### 3. Olayların Durumunu Görüntüleme
Oluşturulan olayların durumunu görüntülemek için aşağıdaki komutlar kullanılır:
“`sql
SHOW EVENTS FROM my_db_name; — Belirli bir veritabanındaki olayları listeler
SHOW EVENTS; — Tüm olayları listeler
SHOW EVENTS\G; — Olayları daha detaylı bir şekilde listeler
“`
**Örnek Çıktı:**
“`
*************************** 1. row ***************************
Db: my_db_name
Name: delete7DayOldMessages
Definer: root@localhost
Time zone: SYSTEM
Type: RECURRING
Execute at: NULL
Interval value: 1
Interval field: DAY
Starts: 2023-10-01 00:00:00
Ends: NULL
Status: ENABLED
Originator: 1
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
“`
#### 4. Olayları Silme
Bir olayı silmek için `DROP EVENT` komutu kullanılır:
“`sql
DROP EVENT someEventName;
“`
#### 5. Olayların Avantajları ve Dikkat Edilmesi Gerekenler
– **Avantajlar:**
– Olaylar, tekrarlayan görevleri otomatikleştirir ve manuel müdahaleye gerek kalmaz.
– SQL tabanlı görevler için cron benzeri bir işlevsellik sunar.
– Olaylar, karmaşık SQL sorgularını ve DML/DDL işlemlerini içerebilir.
– **Dikkat Edilmesi Gerekenler:**
– Olaylar, kullanıcı tarafından çağrılmaz, bu nedenle başarısız olurlarsa sessizce başarısız olurlar.
– Olayların çalışma süreleri ve aralıkları dikkatlice planlanmalıdır.
– Olayların performans üzerindeki etkisi göz önünde bulundurulmalıdır.
#### Sonuç
MySQL’de olaylar, tekrarlayan ve zamanlanmış görevleri otomatikleştirmek için güçlü bir araçtır. Bu özelliği kullanarak, veritabanı yönetimini daha verimli hale getirebilir ve manuel müdahaleleri en aza indirebilirsiniz. Bir sonraki yazıda görüşmek üzere!