Parce que je souhaite effectuer un processus simultané (la concurrence ici est une petite concurrence, c'est-à-dire la concurrence de plusieurs personnes), l'administrateur en arrière-plan exploite une donnée de remboursement pour empêcher plusieurs gestionnaires d'exploiter une seule partie en même temps. sans le savoir Remboursement, une erreur s'est produite.
Mon approche consiste à ajouter un champ lock_time à la table et à interroger les données dont lock_time est égale à 0. Après l'avoir interrogé, remplacez lock_time par l'heure actuelle (j'ai ajouté lock_time=0 comme condition Where lors de la mise à jour).
Question : Y aura-t-il une concurrence d'accès si je fais cela ?
C'est-à-dire que dans un environnement idéal, deux personnes peuvent interroger une donnée en même temps (interrogeant "simultanément" en une minute ou une seconde),
De même, est-il possible pour deux personnes de modifier un certain champ d'une donnée en même temps (modifié "en même temps" en une minute ou une seconde),
La réponse à votre question est tout à fait possible. Vous devez utiliser des verrous et des transactions pour éviter ces problèmes au lieu d'utiliser un nouveau champ
Le verrouillage innodb de Baidu suffit.
Vous pouvez jeter un œil au concept de verrouillage optimiste. Ajoutez un champ de numéro de version, vous pouvez l'ignorer lors de la lecture des données, vérifier le numéro de version lors de la mise à jour des données et mettre à jour le numéro de version. La différence entre le numéro de version et votre lock_time est que une duplication peut se produire si le lock_time n'est pas suffisamment précis. Le numéro de version est toujours +1, et il n'y a pas de problème de versions en double
.Les serrures et autres devraient pouvoir répondre à vos besoins. Examinons de plus près ces deux concepts de Mysql.
Votre idée est proche du verrouillage optimiste. Remplacez lock_time par un horodatage pour vérification. Comparez l'horodatage trouvé avec celui que vous avez modifié, puis soumettez-le. Il est également possible d'utiliser le verrouillage de ligne d'InnoDB pour une petite concurrence, et il n'y a fondamentalement aucune difficulté de performances.