الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تنفيذ الأوامر في وقت معين

بدأه وحيد_الساير في 6 فبراير 2012 · 3 رد · 1,417 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله،

عندما تريد ان يقوم 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;

في الجزء الثاني سوف أعطي أمثلة عنها

تم تعديل هذه المشاركة بواسطة وحيد_الساير في 6 فبراير 2012 في 07:29

عندما تريد أن تتعلم جافا بالفيديو إليك قنوات الYouTube الخاصة بقسم الحاسب الآلي

أ. فاضل خداده

أ. عبدالعزيز الرومي

أ. وحيد الساير

(وَمَا أُوتِيتُمْ مِنْ الْعِلْمِ إِلاَّ قَلِيلاً) [سورة الإسراء: الآية 85]

#2

ملاحظة: الاحداث التي تعمل لا تعطي أي رسالة ان تمت العملية بنجاح أم لم تتم بنجاح، هذا يجب أن يكون من مسؤوليتك بأن تكون العملية سليمة

مثال 1:

كون حدث اسمه testevent يشتغل كل دقيقة بداية من التاريخ المذكور يقوم بالتالي:

ادخال قيمة الوقت الحالي في الجدول log

CREATE EVENT testevent
 ON SCHEDULE EVERY 1 MINUTE
 STARTS '2012-03-13 22:48:00'
 DO
 INSERT INTO `log` VALUES (NOW());

مثال 2:

كون حدث اسمه e_hourly يشتغل كل ساعة (ملاحظة يمسح بيانات جدول sessions كل ساعة) يقوم بالتالي:

امسح بيانات جدول sessions

CREATE EVENT e_hourly
ON SCHEDULE
EVERY 1 HOUR
COMMENT 'Clears OUT sessions table EACH hour.' 
DO
DELETE FROM site_activity.sessions;

مثال 3:

كون حدث اسمه e_daily يشتغل كل يوم (من الوقت الحالي) يقوم بالتالي:

ادخال الوقت واجمال العدد في جدول totals من جدول sessions

مسح بيانات جدول sessions

CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Saves total number of sessions THEN clears the table EACH day'
DO
BEGIN
INSERT INTO site_activity.totals (time, total)
   SELECT CURRENT_TIMESTAMP, COUNT(*)
   FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END

مثال 4:

كون حدث اسمه first_event يبدأ بعد 5 دقائق من الوقت الحالي ويقوم بالتالي:

تحديث جدول table_name بتغيير الحقل field_name بزيادته بواحد

CREATE EVENT first_event
   ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
   DO BEGIN
   	UPDATE table_name SET field_name = field_name + 1;
	END;

مثال 5:

غير الحدث الذي اسمه first_event بأن يبدأ بعد 2 دقيقة من الآن مع الاحتفاظ به بعد أن يتم

ALTER EVENT first_event
	ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 MINUTE
	ON COMPLETION PRESERVE
	DO
  	BEGIN
    	UPDATE table_name SET field_name = field_name + 1;
  	END;

مثال 6:

غير اسم حدث first_event إلى first_event_edited

ALTER EVENT first_event 
 	RENAME TO first_event_edited;

مثال 7:

كون حدث اسمه first_event يشتغل كل 3 ساعات ويبدأ بعد ساعة من الوقت الحالي وينتهي بعد شهر من الوقت الحالي ويقوم بالتالي:

تحديث جدول table_name بتغيير الحقل field_name بزيادته بواحد

CREATE EVENT first_event
	ON SCHEDULE EVERY 3 HOUR
	STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
	ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
	DO
  	BEGIN
    	UPDATE table_name SET field_name = field_name + 1;
  	END;

عندما تريد أن تتعلم جافا بالفيديو إليك قنوات الYouTube الخاصة بقسم الحاسب الآلي

أ. فاضل خداده

أ. عبدالعزيز الرومي

أ. وحيد الساير

(وَمَا أُوتِيتُمْ مِنْ الْعِلْمِ إِلاَّ قَلِيلاً) [سورة الإسراء: الآية 85]

#3

تسلم ايدك يا هندسه وميحرمناش من مواضيعك الجامده شكرااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااا :)

#4

والله رائع....... مشكور

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

مواضيع مشابهة