بسم الله،
عندما تريد ان يقوم MySQL بتنفيذ أوامر معينة في وقت معين أو من وقت لآخر مثل مسح بيانات مؤقتة، أو اضافة سجل جديد كل يوم الساعة 12:01 بعد منتصف الليل، أو نسخ بيانات من جدول لآخر ثم مسح بيانات الجدول الأصلي، وهذا كله دون ان تكون موجود عن الجهاز وبطريقة آلية فعليك أن تتعلم عن
تنفيذ الأوامر آليا باستعمال الحدث
في MySQL الاصدار 5.1.6 فما بعد تم استحداث أمر جديد وهو تكوين حدث CREATE EVENT
أي عند وقت معين يمكن ان يقوم الحدث بتنفيذ عمليات على قواعد البيانات (بشتى أشكالها)
الحدث يمكن أن يكون في وقت محدد schedule أو يتكرر في كل فترة محددة interval
كما هو موضح من نص الأمر
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION PRESERVE]
[ENABLE | DISABLE ]
[COMMENT 'comment']
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}تفسير الأمر كالتالي:
كون/اخلق
CREATE
باستعمال المستخدم الذي اسمه user أو الحالي CURRENT_USER ولاحظ هنا انه يجب أن تكون لك صلاحية في تنفيذ الأمر المطلوب (وهذا الجزء اختياري)
[DEFINER = { user | CURRENT_USER }]
الحدث وتكتب كما هي
EVENT
إن لم يكن موجودا مسبقا (اختياري) وأسمه event_name وتضع اسم من عندك هنا
[IF NOT EXISTS] event_name
في الوقت المحدد
ON SCHEDULE schedule
وتستبدل هنا كلمة schedule بالتالي:
الإختيار الأول
AT في timestamp الوقت الحالي CURRENT_TIMESTAMP أو وقت في المستقبل بالشكل التالي '2006-02-10 23:59:00' وتضيف له اختياريا فترة INTERVAL (وتعني بعد مدة معينة من الوقت المحدد) ان اردت وهي مشروحة في الاسفل
وهذا الاختيار لتنفيذ العملية المطلوبة مرة واحدة فقط
AT timestamp [+ INTERVAL interval] ...
الاختيار الثاني
EVERY تعني كل
ثم نضع الفترة interval وتستبدل بالتالي:
تبدأ برقم معين quantity ثم تلحقه بتعريف الفترة وهي إحدى الكلمات المذكورة هنا:
- YEAR سنة
- QUARTER ربع سنة
- MONTH شهر
- DAY يوم
- HOUR ساعة
- MINUTE دقيقة
- WEEK اسبوع
- SECOND ثانية
- YEAR_MONTH سنة إلى شهر 201205 لا يوجد فاصل بين السنة والشهر
- DAY_HOUR يوم إلى ساعة ويفصل بينهما بمسافة
- DAY_MINUTE يوم إلى دقيقة ويوضع اليوم ثم مسافة ثم الساعة ثم علامة : ثم الدقيقة
- DAY_SECOND يوم إلى ثانية ويوضع اليوم ثم مسافة ثم الساعة ثم علامة : ثم الدقيقة ثم علامة : ثم الثانية
- HOUR_MINUTE ساعة إلى دقيقة 4:50 أي اربع ساعات و50 دقيقة
- HOUR_SECOND ساعة إلى ثانية 1:14:10 أي ساعة و14 دقيقة و10 ثوان
- MINUTE_SECOND دقيقة إلى ثانية 54:30 أي 54 دقيقة و30 ثانية
EVERY quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}عند استكمال تنفيذ الحدث سوف يتم الغاءه آليا، لكن يمكن الاحتفاظ به بكتابة التالي وهي تعني ابقي الحدث بعد تنفيذه (الامتداد التالي اختياري)
[ON COMPLETION PRESERVE]
الحدث يكون فعال عند تكوينه إلا إن أردنا عدم تفعيل الحدث (لتوقيفه قبل التنفيذ) نستعمل الامتداد التالي DISABLE ولإعادة تفعيله نكتب ENABLE باستعمال ALTER EVENT (اختياري)
[ENABLE | DISABLE ]
لإضافة ملاحظة عن الحدث (اختياري)
[COMMENT 'comment']
لعمليات الحدث (ممكن ان نضع هنا العمليات المطلوبة كمجموعة أوامر MySQL أو تنفيذ داله Procedure خارجي (وهي الطريقة الأفضل حيث انك تستطيع ان تتأكد من ان العمليات تعمل دون مشاكل ثم تضيفها للحدث)
DO event_body;
يجب أن لا ننسى أن نفعل القدرة على استعمال الاحداث في MySQL بالأمر التالي في اعدادات الMySQL
SET GLOBAL event_scheduler = ON;
في الجزء الثاني سوف أعطي أمثلة عنها
