web-dev-qa-db-fra.com

Comment planifier une requête MySQL?

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?

21
mmdel

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
42
rkosegi

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).

1
user2273519