J'ai deux tables, une appelée utilisateur, stocke les utilisateurs, et une appelée processus qui stocke la liste des processus actifs mettant à jour les utilisateurs. Ce que je veux faire est de pouvoir sélectionner 50 utilisateurs obsolètes, les verrouiller en insérant un enregistrement dans la table de processus avec la plage d'id utilisateur que je mets à jour, de sorte que si un second processus est déclenché haut, il ne commencera pas à traiter les mêmes utilisateurs.Dois-je utiliser des verrous de table ou des transactions?
Pour résumer:
- Sélectionnez dans la table de processus, le dernier identifiant traité
- Sélection dans la table utilisateur 50 ids> dernier traitement id
- Insérer dans la table de processus un nouveau record avec la plage d'identifiants que je suis sur le point de traiter
Je veux m'assurer que si 2 processus (P1 et P2) sont allumés en même temps, les 3 étapes sont exécutées consécutivement pour chaque processus. à savoir:
- P1 étape 1
- P1 étape 2
- P1 étape 3
- étape P2 1
- étape P2 2
- P2 étape 3
et non
- P1 étape 1
- P2 étape 1
- P1 étape 2
- etc.
Comment dois-je faire? Transactions ou verrous de table? Ou même quelque chose d'autre?
Mes tables sont celles d'InnoDB.
Merci!
Merci pour votre réponse. Le fait est que chaque mise à jour peut prendre beaucoup de temps et je ne veux pas garder quoi que ce soit enfermé dans la base de données pendant longtemps. Je cherche juste un moyen de m'assurer que mes 3 étapes sont exécutées consécutivement. –