نمایش نتایج 1 تا 3 از 3

نام تاپیک: معرفی زمانبند کار Event Scheduler در MYSQL

  1. #1
    کاربر دائمی آواتار mbf5923
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    vb.NET-قسمت کد ویو-لاین هفتم
    سن
    36
    پست
    595

    معرفی زمانبند کار Event Scheduler در MYSQL

    با سلام
    چند وقت پيش يه کاري ديدم با mysql انجام شده بود که به نظرم هم جالب اومد و هم کاربردي که گفتم اينجا بذارم دوستاني که نميدونن استفاده کنن.
    event_scheduler يا زمانبندي رويداد در MYSQL
    با استفاده از اين خاصيت در MYSQL شما ميتونيد يک کار خاص رو به MYSQL بسپاريد تا در مقاطع زماني مشخص شده به صورت اتوماتيک انجام بده.
    مثلا فرض کنيد ما ميخواهيم هر روز اطلاعاتي رو که بيش از 10 روز پيش ايجاد شده اند رو پاک کنيم و نميخوايم اين کار رو به PHP يا ASP و... بسپاريم.با استفاده از زمانبند رويداد ما ميتونيم به MYSQL بگيم خودش اين عمل رو هر روز انجام بده.
    مثال زير فکر ميکنم گوياي مسئله باشه:

    ابتداي کار لازمه که ما زمانبند رو در MYSQL فعال کنيم براي اين کار در PHPMYADMIN در قسمت SQL کد زير را وارد کنيد تا زمانبند فعال بشه:

    SET GLOBAL event_scheduler = ON;

    يا
    SET GLOBAL event_scheduler = 1;

    که در صورت درست انجام شدن با پيغام
    Your SQL query has been executed successfully
    روبرو خواهيد شد
    خوب بعد از اين کار نوبت به ساخت جدول مثال ما ميرسه
    براي اين مثال ما جدولي به نام cart رو با مشخصات زير ايجاد ميکنيم

    CREATE TABLE cart 
    (
    cart_id INT AUTO_INCREMENT,
    user_id INT,
    product_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (cart_id)
    ) ;


    بعد از ايجاد جدول فوق وارد اون ميشيم و در قسمت کد SQL کد زير رو وارد ميکنيم
    CREATE EVENT newEvent
    ON SCHEDULE EVERY 1 DAY
    DO
    DELETE FROM cart WHERE created_at <= DATE_SUB(NOW(), INTERVAL 10 DAY) ;

    و اما توضيح کد بالا
    خط اول که دستور ايجاد يک رويداد جديد به نام newEvent رو صادر ميکنه ما به جاي newEvent ميتونيم نام دلخواه خودمون رو بذاريم
    خط دوم مشخص ميکنه که اين رويداد بايد هر روز کاري که گفته ميشه رو انجام بده که میتونید به جای EVERY 1 DAY از هر مقدار دیگه استفاده کنید مثلا EVERY 1 SECOND که هر ثانیه عملیات گفته شده رو انجام بده
    در خط سوم کلمه کلیدی DO اومده که معرف عملیاتی هست که باید انجام بشه و در خط چهارم دستوری که باید انجام بشه رو ذکر میکنیم که در اینجا رکوردهایی که بیش از 10 روز از ایجادشون میگذره رو حذف میکنیم.
    اما یه سری نکات لازم هست که دوستان بدونن.
    اگه ما یک زمانبند رو میخوایم از مثلا فردا شروع به کار کنه و یک سال هم کار کنه لازم هست از دستور زیر استفاده کنیم
    این دستورات قبل از کلمه کلیدی Do نوشته میشن:

    STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR

    این دستور در خط اول زمان شرع شدن زمانبند رو مشخص میکنه که از 24 ساعت دیگه شروع بشه و در خط دوم مشخص میکنه که یک سال دیگه( از امروز نه از شروع) پایان پیدا کنه
    البته ما میتونیم به استارت و پایان تاریخ هم بدیم مثل مثال زیر

    STARTS '2012-10-30 13:00:00'

    البته هنوز تاریخ فارسی ساپورت نمیکنه

    برای نمایش تمامی زمانبند های استفاده شده در یک دیتابیس میتونیم از دستور

    SHOW EVENTS;

    استفاده کنیم که تمام زمانبندهای دیتابیس مورد نظر رو نمایش میده
    برای ویرایش یک زمانبند میتونیم از کد زیر استفاده کنیم:

    Alter newEvent
    ON SCHEDULE EVERY 1 Month
    DO
    DELETE FROM cart WHERE created_at <= DATE_SUB(NOW(), INTERVAL 10 DAY) ;


    همونطور که میدونید کلمه کلیدی Alter مشخص کننده این هست که زمانبند وجود داره و میخواهیم جایگزینی انجام بشه مثل Alter Table
    lمثلا دستور زیر نام زمانبندی که وجود داره رو تغییر میده:

    ALTER EVENT newEvent
    RENAME TO myEvent;

    خوب و اما از بین بردن زمانبند که خیلی مهم هستش چرا که خیلی از دوستان برای تستش یه زمانبند 1 ثانیه ای درست میکنن که هر ثانیه عمل اینسرت انجام بده و اگه زود به دادش نرسن.....
    دستور زیر زمانبند موجود رو از بین میبره

    DROP EVENT newEvent;


    که به جای newEvent نام زمانبندی که میخوایم از بین بره رو وارد میکنیم

    امیدوارم مورد استفاده دوستان قرار بگیره.
    با آرزوی موفقیت برای همه دوستان
    سوالی بود بلد باشم در خدمتم

  2. #2

    نقل قول: معرفی زمانبند کار Event Scheduler در MYSQL

    سلام
    مثلا یه جدول کاربران داریم که یه فیلد برای ذخیره امتیاز کاربر داره
    حالا اگه بخواهیم هر روز 100 امتیاز به هر کاربر اضافه بشه باید چکار کنیم؟
    آیا mysql جمع و تفریق داره یا باید از php استفاده کنم؟

  3. #3

    نقل قول: معرفی زمانبند کار Event Scheduler در MYSQL

    نقل قول نوشته شده توسط sayberwar مشاهده تاپیک
    سلام
    مثلا یه جدول کاربران داریم که یه فیلد برای ذخیره امتیاز کاربر داره
    حالا اگه بخواهیم هر روز 100 امتیاز به هر کاربر اضافه بشه باید چکار کنیم؟
    آیا mysql جمع و تفریق داره یا باید از php استفاده کنم؟
    بله، به این صورت باید عمل کنید (کد زمانبندی + آپدیت):

    CREATE EVENT `test` ON SCHEDULE EVERY 1 DAY STARTS '2015-07-18 00:00:01' ON COMPLETION NOT PRESERVE ENABLE DO UPDATE `users` SET `score` = `score` + 100 WHERE id =1

تاپیک های مشابه

  1. آموزش: معرفی زمانبند کار Event Scheduler در MYSQL
    نوشته شده توسط mbf5923 در بخش PHP
    پاسخ: 0
    آخرین پست: پنج شنبه 09 آذر 1391, 17:16 عصر
  2. معرفی توابع کار بر روی رشته ها
    نوشته شده توسط amirepsilon در بخش PHP
    پاسخ: 8
    آخرین پست: دوشنبه 21 دی 1388, 22:18 عصر
  3. گفتگو: کار با دلفی و mysql
    نوشته شده توسط djscsi در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: یک شنبه 03 شهریور 1387, 00:47 صبح
  4. سوال: معرفی یک کامپوننت برای Scheduler در Asp.Net
    نوشته شده توسط cactuskhan در بخش ASP.NET Web Forms
    پاسخ: 14
    آخرین پست: پنج شنبه 02 خرداد 1387, 09:18 صبح
  5. نحوی کار event ها در دلفی
    نوشته شده توسط delphi developer در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: پنج شنبه 14 اردیبهشت 1385, 13:08 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •