web-dev-qa-db-ja.com

MySQLクエリをスケジュールする方法は?

MySQLで指定した間隔で実行するタスクをスケジュールできますか?

インベントリMySQLデータベースがあります。構造は次のとおりです。

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

レポートの基礎は、過去の日付に対して在庫評価の詳細項目を賢明にしたい場合です。

avgcostおよびquantityフィールドは、新しい購入がシステムに投稿されると変更されます。クエリを実行して現在の株式評価を確認できますが、前日の株式評価も確認できるようにしたいです。それ、どうやったら出来るの?数量については、売上を追加し、現在の日付からレポートが必要とする日付まで購入を差し引くことができますが、購入が投稿されるたびに更新されるためavgcostが最新です。

次のような自動日次ダンプを実行できるかどうか疑問に思っていました。

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

このタスクはMySQLで直接スケジュールすることは可能ですか、それとも他のソリューションがありますか?

21
mmdel

(少なくとも)2つの基本的なオプションがあります。

1、 イベントスケジューラ をご覧ください

まずテーブルを作成します。フィールドを持つstock_dumps

品目コード、数量、平均コスト、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
42
rkosegi

EyeShareAutoSQL.net などの一般的なツールを使用できます。 EyeShareはより汎用的なITプロセス自動化ツールであり、AutoSQLはクエリをスケジュールして(ExcelまたはCSVに)出力するための専用ツールです。

1
user2273519