Can I schedule a task to run at a specified interval in MySQL?
I have an inventory MySQL database. The structure is as follows:
table_1 fields: itmcode, avgcost table_2 fields: itmcode(FK to table_1(itmcode)), quantity
The basis of the report is when I want the inventory valuation details item wise for a past date.
The avgcost
and quantity
fields is changed when a new purchase is posted into system. I can run a query to see the current stock valuation, but I want to be able to see the stock valuation at a previous date as well. How do I do that? For quantity, I can add the sales and deduct the purchases backwards from the current date until whatever date the report requires, but the avgcost is current since this gets updated each time a purchase is posted.
I was wondering if an automatic daily dump could be executed, similar to this:
SELECT itmcode, quantity, avgcost, (avgcost * quantity) as ttlval FROM table_1 JOIN table_2 ON table_1.itmcode = table_2.itmcode
Is this task possible to schedule directly in MySQL or is there some other solution?
Creating new MySQL events First, specify the name of the event that you want to create the CREATE EVENT keywords. The event names must be unique within the same database. Second, specify a schedule after the ON SCHEDULE keywords. Third, place SQL statements after the DO keyword.
The MySQL Event Scheduler manages the scheduling and execution of events, that is, tasks that run according to a schedule.
Assuming you have MySQL rights to create events, the basic syntax is: CREATE EVENT `event_name` ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE | DISABLE ON SLAVE] DO BEGIN -- event body END; The schedule can be assigned various settings, e.g.
you have 2 basic options (at least):
1, Take a look at Event Scheduler
First create table eg. stock_dumps with fields
itemcode, quantity, 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
Please follow instructions how to enable scheduler on link posted above. Note : Old versions of mysql don't have event scheduler
2, Create cron job/windows scheduled job:
create sql file:
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;
schedule this command:
mysql -uusername -ppassword < /path/to/sql_file.sql
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With