2012-03-08 6 views
15

Tôi có thể lên lịch một tác vụ để chạy ở một khoảng thời gian cụ thể trong MySQL không?Cách lên lịch truy vấn MySQL?

Tôi có cơ sở dữ liệu MySQL khoảng không quảng cáo. Cấu trúc như sau:

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

Cơ sở của báo cáo là khi tôi muốn chi tiết giá trị khoảng không quảng cáo khôn ngoan trong một ngày qua.

Trường avgcostquantity được thay đổi khi mua hàng mới được đăng vào hệ thống. Tôi có thể chạy một truy vấn để xem định giá cổ phiếu hiện tại, nhưng tôi muốn có thể xem định giá cổ phiếu tại một ngày trước đó. Làm thế nào để làm điều đó? Đối với số lượng, tôi có thể thêm doanh thu và khấu trừ các giao dịch mua lại từ ngày hiện tại cho đến ngày bất kỳ báo cáo nào yêu cầu, nhưng số dư hiện tại là do số tiền này được cập nhật mỗi lần mua hàng được đăng.

Tôi đã tự hỏi nếu một tự đổ hàng ngày có thể được thực thi, tương tự như sau:

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

là nhiệm vụ này có thể lên lịch trực tiếp trong MySQL hoặc là có một số giải pháp khác?

Trả lời

32

bạn có 2 tùy chọn cơ bản (ít nhất):

1, Hãy xem Event Scheduler

Đầu tiên tạo bảng ví dụ. stock_dumps với các lĩnh vực

itemcode, số lượng, 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 

Hãy làm theo hướng dẫn làm thế nào để kích hoạt tính năng lên lịch vào liên kết đăng ở trên. Lưu ý: phiên bản cũ của mysql không có sự kiện lịch

2, Tạo công việc cron/cửa sổ lên kế hoạch công việc:

tạo 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; 

lịch lệnh này:

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

Phiên bản tối thiểu của MySQL để hỗ trợ trình lên lịch sự kiện là gì? – Lucky

+3

http://dev.mysql.com/doc/refman/5.1/en/events.html: "Hỗ trợ sự kiện đã được thêm vào trong MySQL 5.1.6" – rkosegi

1

Có các công cụ chung có sẵn như EyeShare hoặc AutoSQL.net để thực hiện việc này. EyeShare là một công cụ tự động hoá quy trình CNTT chung hơn và AutoSQL là một công cụ mục đích duy nhất đặc biệt để lên lịch các truy vấn và xuất chúng (tới Excel hoặc CSV).