sql >> Database >  >> RDS >> Mysql

Waarom werkt het mysql-gebeurtenisschema niet in de database localhost?

Kijk naar het volgende.

Geef een select CURRENT_TIMESTAMP; of

select count(*) as theCount
from customer_group
where is_status=1 and CURRENT_TIMESTAMP >= end_date;

Met andere woorden, doe wat verkenning. Gebeurtenissen slagen of mislukken stil omdat ze geen gebruikersinterface hebben.

Voer enkele opdrachten uit zoals:

show variables where variable_name='event_scheduler';

-- momenteel UIT (of het kan AAN zijn)

Specificeer de starttijd voor uw evenement tijdens het maken, en specificeer ON COMPLETION PRESERVE zoals

drop event if exists `Every_5_Minutes_QuestionUpdateImport`;
DELIMITER $$
CREATE EVENT `Every_5_Minutes_QuestionUpdateImport`
  ON SCHEDULE EVERY 5 MINUTE STARTS '2015-09-01 00:00:00'
  ON COMPLETION PRESERVE
DO BEGIN
    --
    -- all your statements go here
    -- 
END$$
DELIMITER ;

Zet de gebeurtenis-handler aan:

SET GLOBAL event_scheduler = ON;  -- turn her on and confirm below

Bevestig het:

show variables where variable_name='event_scheduler';

Bekijk de status van alle gebeurtenissen in een bepaalde database op databasenaam:

show events from stackoverflow; -- note stackoverflow is my database name 

Schakel een bepaalde gebeurtenis op naam in of uit in de huidige geselecteerde database:

ALTER EVENT Every_2_Minutes_QuestionUpdateImport disable;
ALTER EVENT Every_2_Minutes_QuestionUpdateImport enable;

En last but not least, als ik een nieuwe gebeurtenis schrijf, voeg ik altijd eerst in de gebeurtenisverklaringen toe om in een logtabel te loggen (met een insert-instructie en een datetime van now() ). Op die manier weet ik dat het is geactiveerd en dat gegevens in een waar-clausule zoals die van jou me misschien geen verkeerde lezing geven van het hele ding.

En ik bedoel, ik word overal gek. Aanvankelijk leg ik het later uit:

    set filename:=concat('c:\\datavault\\stackoverflow\\app01\\batches\\processMe_',LPAD(@idToPerform, 8, '0'),'.txt');
    set logMsg:=concat("It would appear I am to process this thing: ",filename);

    insert EvtsLog(incarnationId,evtName,step,debugMsg,dtWhenLogged)
    select incarnationId,evtAlias,10,logMsg,now(); -- 10: some step somewhere in the middle

Onthoud voor alle praktische doeleinden (behalve misschien uw tafel waar u echt om geeft van uw vraag) ... dat EvtsLog van mij is je enige gebruikersinterface als Evenementenprogrammeur en je beste vriend.

Kijk op de handleiding pagina voor wat OP VOLTOOIING BEHOUD betekent evenals andere dingen.




  1. SQL:Een relatietabel maken met 2 verschillende auto_increment

  2. Hoe kan ik een MySQL-query stoppen als het te lang duurt?

  3. Leer hoe u PK maakt van Sequence Trigger in SQL Developer

  4. Hoe combineer ik gegevens uit twee afzonderlijke tabellen in een enkele cursor?