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で直接スケジュールすることは可能ですか、それとも他のソリューションがありますか?
(少なくとも)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
EyeShare や AutoSQL.net などの一般的なツールを使用できます。 EyeShareはより汎用的なITプロセス自動化ツールであり、AutoSQLはクエリをスケジュールして(ExcelまたはCSVに)出力するための専用ツールです。