php - Est-il possible que les requêtes de données MySQL et les modifications se produisent en même temps?
大家讲道理
大家讲道理 2017-05-16 13:04:36
0
5
454

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(5)
为情所困

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal