खोज…


एक घटना बनाएँ

जब आप शेड्यूल कर रहे होते हैं तो एसक्यूएल से संबंधित, और कम फ़ाइल से संबंधित है जब जटिल क्रोन इंटरैक्शन से बचने के लिए मैसकल की अपनी ईवेंट की कार्यक्षमता है। यहां मैनुअल पेज देखें। ऐसी घटनाओं के बारे में सोचें जो संग्रहीत प्रक्रियाएं हैं जो आवर्ती अंतराल पर चलने के लिए निर्धारित हैं।

ईवेंट-संबंधित समस्याओं को डीबग करने में समय बचाने के लिए, ध्यान रखें कि ईवेंट को संसाधित करने के लिए वैश्विक ईवेंट हैंडलर को चालू करना होगा।

SHOW VARIABLES WHERE variable_name='event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+

इसके साथ, कुछ भी ट्रिगर नहीं होगा। तो इसे चालू करें:

SET GLOBAL event_scheduler = ON;

परीक्षण के लिए स्कीमा

create table theMessages
(   id INT AUTO_INCREMENT PRIMARY KEY,
    userId INT NOT NULL,
    message VARCHAR(255) NOT NULL,
    updateDt DATETIME NOT NULL,
    KEY(updateDt)
);
 
INSERT theMessages(userId,message,updateDt) VALUES (1,'message 123','2015-08-24 11:10:09');
INSERT theMessages(userId,message,updateDt) VALUES (7,'message 124','2015-08-29');
INSERT theMessages(userId,message,updateDt) VALUES (1,'message 125','2015-09-03 12:00:00');
INSERT theMessages(userId,message,updateDt) VALUES (1,'message 126','2015-09-03 14:00:00');

उपरोक्त आवेषण एक प्रारंभिक बिंदु दिखाने के लिए प्रदान किए जाते हैं। ध्यान दें कि नीचे बनाई गई 2 घटनाएं पंक्तियों को साफ कर देंगी।

2 ईवेंट बनाएं, प्रतिदिन 1 रन, हर 10 मिनट पर 2 रन

ध्यान न दें कि वे वास्तव में क्या कर रहे हैं (एक दूसरे के खिलाफ खेल रहे हैं)। बिंदु INTERVAL और शेड्यूलिंग पर है।

DROP EVENT IF EXISTS `delete7DayOldMessages`;
DELIMITER $$
CREATE EVENT `delete7DayOldMessages`
  ON SCHEDULE EVERY 1 DAY STARTS '2015-09-01 00:00:00'
  ON COMPLETION PRESERVE
DO BEGIN
   DELETE FROM theMessages 
   WHERE datediff(now(),updateDt)>6; -- not terribly exact, yesterday but <24hrs is still 1 day
   
  -- Other code here

END$$
DELIMITER ;

...

DROP EVENT IF EXISTS `Every_10_Minutes_Cleanup`;
DELIMITER $$
CREATE EVENT `Every_10_Minutes_Cleanup`
  ON SCHEDULE EVERY 10 MINUTE STARTS '2015-09-01 00:00:00'
  ON COMPLETION PRESERVE
DO BEGIN
   DELETE FROM theMessages 
   WHERE TIMESTAMPDIFF(HOUR, updateDt, now())>168; -- messages over 1 week old (168 hours)

   -- Other code here
END$$
DELIMITER ;

घटना की स्थिति दिखाएं (विभिन्न दृष्टिकोण)

SHOW EVENTS FROM my_db_name; -- List all events by schema name (db name)
SHOW EVENTS; 
SHOW EVENTS\G; -- <--------- I like this one from mysql> prompt

*************************** 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: 2015-09-01 00:00:00
                Ends: NULL
              Status: ENABLED
          Originator: 1
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
*************************** 2. row ***************************
                  Db: my_db_name
                Name: Every_10_Minutes_Cleanup
             Definer: root@localhost
           Time zone: SYSTEM
                Type: RECURRING
          Execute at: NULL
      Interval value: 10
      Interval field: MINUTE
              Starts: 2015-09-01 00:00:00
                Ends: NULL
              Status: ENABLED
          Originator: 1
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
2 rows in set (0.06 sec)

विचार करने के लिए यादृच्छिक सामान

DROP EVENT someEventName; - घटना और उसके कोड को हटाता है

ON COMPLETION PRESERVE तरह से ON COMPLETION PRESERVE - जब घटना प्रसंस्करण किया जाता है, तो इसे बनाए रखें। अन्यथा, इसे हटा दिया गया है।

घटनाएँ ट्रिगर की तरह हैं। उन्हें उपयोगकर्ता के कार्यक्रम द्वारा नहीं बुलाया जाता है। बल्कि, वे अनुसूचित हैं। जैसे, वे चुपचाप सफल होते हैं या असफल होते हैं।

मैनुअल पेज का लिंक अंतराल विकल्पों के साथ काफी लचीलापन दिखाता है, जो नीचे दिखाया गया है:

मध्यान्तर:

quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
          WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
          DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

ईवेंट शक्तिशाली तंत्र हैं जो आपके सिस्टम के लिए आवर्ती और अनुसूचित कार्यों को संभालते हैं। उनमें कई कथन, डीडीएल और डीएमएल दिनचर्या शामिल हो सकते हैं, और जटिल जुड़ाव के रूप में आप यथोचित इच्छा कर सकते हैं। कृपया MySQL मैनुअल पेज को संग्रहीत कार्यक्रमों पर प्रतिबंध के हकदार देखें।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow