【问题标题】:How to schedule a MySQL query?如何安排 MySQL 查询?
【发布时间】:2012-03-26 03:41:58
【问题描述】:

我可以在 MySQL 中安排任务以指定的时间间隔运行吗?

我有一个库存 MySQL 数据库。结构如下:

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

报告的基础是当我想要过去某个日期的库存估价详细信息时。

当有新的采购过帐到系统时,avgcostquantity 字段会发生变化。我可以运行查询以查看当前的股票估值,但我也希望能够查看前一天的股票估值。我怎么做?对于数量,我可以添加销售额并从当前日期向后扣除购买,直到报告要求的任何日期,但平均成本是最新的,因为每次发布购买时都会更新。

我想知道是否可以执行自动每日转储,类似于:

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

这个任务可以直接在 MySQL 中调度还是有其他解决方案?

【问题讨论】:

    标签: mysql scheduled-tasks


    【解决方案1】:

    您有 2 个基本选项(至少):

    1、看看Event Scheduler

    首先创建表,例如。带有字段的 stock_dumps

    itemcode、数量、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
    

    请按照上面发布的链接上的说明如何启用调度程序。 注意:旧版本的 mysql 没有事件调度器

    2、创建cron作业/windows定时作业:

    创建 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;
    

    调度这个命令:

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

    【讨论】:

    【解决方案2】:

    有可用的通用工具,例如 EyeShareAutoSQL.net 来执行此操作。 EyeShare 是一种更通用的 IT 流程自动化工具,而 AutoSQL 是一种单一用途的工具,专门用于安排查询并将其输出(到 Excel 或 CSV)。

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2019-07-21
      • 1970-01-01
      • 2012-01-07
      • 2012-09-17
      • 2023-03-23
      • 2015-08-12
      • 2011-08-05
      相关资源
      最近更新 更多