Problème de mise à jour par lots de verrous de lignes Propel
-
10-07-2019 - |
Question
J'utilise Propulser en tant que mon ORM.
Je dois effectuer une mise à jour par lot dans une table contenant les champs suivants:
ID
Company
Assigned
La mise à jour prendra en compte un tableau de Société
et définira le champ Assigne
d sur 1
.
Le problème est qu'il peut y avoir 2 mises à jour par lot qui se produisent en même temps. Ainsi, lorsque cela se produira, je devrai accepter une mise à jour et en rejeter une autre. Est-il possible de verrouiller la table pour une mise à jour par lot? Ou existe-t-il une meilleure solution?
La solution
Voici la solution que j'ai trouvée.
Au lieu de le verrouiller, une meilleure solution consiste à utiliser la requête équivalente suivante lors de la mise à jour par lot
update table
set Assigned=2
where Assigned=1
and Company in {company1, company2}
Maintenant, si le nombre de lignes renvoyées n'est pas le même que le nombre de Société
sélectionné, alors l'opération entière doit être annulé .