sql >> Databáze >  >> RDS >> Mysql

Proč plán událostí mysql nefunguje v databázi localhost?

Podívejte se na následující.

Vydejte select CURRENT_TIMESTAMP; nebo

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

Jinými slovy, proveďte nějaký průzkum. Události jsou úspěšné nebo neúspěšné, protože nemají žádné uživatelské rozhraní.

Spusťte některé příkazy jako:

show variables where variable_name='event_scheduler';

-- aktuálně VYPNUTO (nebo může být zapnuto)

Během vytváření zadejte čas zahájení události a zadejte ON COMPLETION PRESERVE jako například

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 ;

Zapněte obslužnou rutinu události:

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

Potvrďte to:

show variables where variable_name='event_scheduler';

Zkontrolujte stav všech událostí v konkrétní databázi podle názvu databáze:

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

Zakázat nebo povolit určitou událost podle názvu v aktuálně vybrané db:

ALTER EVENT Every_2_Minutes_QuestionUpdateImport disable;
ALTER EVENT Every_2_Minutes_QuestionUpdateImport enable;

A v neposlední řadě, když píšu novou událost, vždy nejprve přidám do příkazů události protokolování do tabulky protokolu (s příkazem insert a datetime now() ). Tímto způsobem vím, že se to spustilo a že data v klauzuli where, jako je ta vaše, mi možná neposkytují špatné informace o celé věci.

A chci říct, že šílím všude kolem. Zpočátku, pak to vypustím později:

    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

Mějte na paměti pro všechny praktické účely (možná s výjimkou vašeho stolu, na kterém vám z vaší otázky opravdu záleží) ... že EvtsLog moje je vaše jediné uživatelské rozhraní jako programátora událostí a vašeho nejlepšího přítele.

Podívejte se na manuálovou stránku, co PO DOKONČENÍ ZACHOVAT znamená i jiné věci.




  1. Postgres:zkontrolujte, zda pole pole obsahuje hodnotu?

  2. Jak provedu dotazování databáze v reálném čase v MySQL/PHP?

  3. Formátování pole PHP pro klauzuli SQL IN

  4. MySQL - Jak vložit do tabulky, která má vztah many-to-many