Puis-je planifier l'exécution d'une tâche à un intervalle spécifié dans MySQL?
J'ai une base de données MySQL d'inventaire. La structure est la suivante:
table_1 fields: itmcode, avgcost
table_2 fields: itmcode(FK to table_1(itmcode)), quantity
La base du rapport est le moment où je veux que les détails de l'évaluation des stocks soient appliqués à une date antérieure.
Les champs avgcost
et quantity
sont modifiés lorsqu'un nouvel achat est publié dans le système. Je peux exécuter une requête pour voir l'évaluation actuelle des stocks, mais je veux également pouvoir voir l'évaluation des stocks à une date précédente. Comment je fais ça? Pour la quantité, je peux ajouter les ventes et déduire les achats en arrière de la date actuelle jusqu'à la date requise par le rapport, mais le coût moyen est à jour car il est mis à jour chaque fois qu'un achat est publié.
Je me demandais si un vidage quotidien automatique pouvait être exécuté, similaire à ceci:
SELECT itmcode, quantity, avgcost, (avgcost * quantity) as ttlval
FROM table_1
JOIN table_2 ON table_1.itmcode = table_2.itmcode
Cette tâche est-elle possible de planifier directement dans MySQL ou existe-t-il une autre solution?
vous avez 2 options de base (au moins):
1, jetez un oeil à Planificateur d'événements
Créez d'abord une table, par exemple. stock_dumps avec champs
itemcode, quantité, 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
Veuillez suivre les instructions pour activer le planificateur sur le lien affiché ci-dessus. Remarque: les anciennes versions de mysql n'ont pas de planificateur d'événements
2, Créer un travail cron/travail planifié Windows:
créer un fichier 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;
planifiez cette commande:
mysql -uusername -ppassword < /path/to/sql_file.sql
Il existe des outils génériques tels que EyeShare ou AutoSQL.net pour ce faire. EyeShare est un outil d'automatisation des processus informatiques plus générique et AutoSQL est un outil à usage unique spécifiquement pour planifier des requêtes et les sortir (vers Excel ou CSV).