2012-03-08 4 views
15

È possibile pianificare un'attività da eseguire a intervalli specificati in MySQL?Come pianificare una query MySQL?

Ho un database MySQL di inventario. La struttura è la seguente:

table_1   fields: itmcode, avgcost 
table_2   fields: itmcode(FK to table_1(itmcode)), quantity 

La base del rapporto è quando desidero che la voce di dettagli di valutazione scorte sia valida per una data passata.

I campi avgcost e quantity vengono modificati quando un nuovo acquisto viene registrato nel sistema. Posso eseguire una query per vedere la valutazione attuale delle azioni, ma voglio essere in grado di vedere la valutazione delle azioni anche in una data precedente. Come lo faccio? Per quantità, posso aggiungere le vendite e dedurre gli acquisti a ritroso dalla data corrente fino a qualsiasi data richiesta dal rapporto, ma il costo è aggiornato poiché questo viene aggiornato ogni volta che viene pubblicato un acquisto.

mi chiedevo se una discarica automatico giornaliero potrebbe essere eseguita, simile a questo:

SELECT itmcode, quantity, avgcost, (avgcost * quantity) as ttlval 
FROM table_1 
JOIN table_2 ON table_1.itmcode = table_2.itmcode 

È questo il compito possibile programmare direttamente in MySQL o c'è qualche altra soluzione?

risposta

32

si hanno 2 opzioni di base (almeno):

1, dare un'occhiata a Event Scheduler

Innanzitutto creare tabella di esempio. stock_dumps con campi

itemcode, quantità, avgcost, ttlval, dump_date (DATETIME)

CREATE EVENT `Dumping_event` ON SCHEDULE 
     EVERY 1 DAY 
    ON COMPLETION NOT PRESERVE 
    ENABLE 
    COMMENT '' 
    DO BEGIN 
INSERT INTO stock_dumps(itemcode, quantity, avgcost, ttlval,dump_date) 
SELECT itmcode, quantity, avgcost, (avgcost * quantity)as ttlval, NOW() 
    FROM table_1 JOIN table_2 ON table_1.itmcode = table_2.itmcode; 
END 

Si prega di seguire le istruzioni su come abilitare scheduler sul link postato qui sopra. Nota: Le vecchie versioni di MySQL non hanno Event Scheduler

2, Crea job cron/finestre processo programmato:

creare il file sql:

INSERT INTO stock_dumps(itemcode, quantity, avgcost, ttlval,dump_date) 
SELECT itmcode, quantity, avgcost, (avgcost * quantity)as ttlval, NOW() 
FROM table_1 JOIN table_2 ON table_1.itmcode = table_2.itmcode; 

programma di questo comando:

mysql -uusername -ppassword < /path/to/sql_file.sql 
+1

qual è la versione minima di MySQL per supportare lo scheduler di eventi? – Lucky

+3

http://dev.mysql.com/doc/refman/5.1/en/events.html: "Il supporto eventi è stato aggiunto in MySQL 5.1.6" – rkosegi

1

Ci sono strumenti generici disponibili come EyeShare o AutoSQL.net per farlo. EyeShare è uno strumento di automazione dei processi IT più generico e AutoSQL è uno strumento a singolo scopo specifico per pianificare le query e trasmetterle (a Excel o CSV).