A et B accèdent à un ensemble de données sur la même page en même temps. A a modifié l'une des données de B n'a pas été actualisée, donc les informations que B voit sont avant que A ne la modifie à ce moment-là. doit modifier cette donnée . Comment puis-je rappeler à B que ces données ont été modifiées.
J'ai vu un moyen de connaître les données en fonction de l'heure de la dernière modification avant de modifier les données (sélectionnez * from xxx où updatetime = xxx et id= xxx). S'il est introuvable, cela signifie qu'il a été modifié. est trouvé, cela signifie qu'il a été modifié.Je voudrais demander s'il existe une meilleure façon ?
Je me souviens que le verrouillage optimiste en veille prolongée est implémenté à l'aide du champ du numéro de version. Après chaque mise à jour réussie, la valeur du champ du numéro de version est incrémentée de 1.
Avant la mise à jour, vérifiez d'abord si le numéro de version dans la base de données et la version. Les numéros enregistrés dans la page sont les mêmes, si le numéro de version devient plus grand, l'utilisateur est informé que d'autres utilisateurs ont modifié les données lors de l'édition.
Bien sûr, vous pouvez également utiliser le verrouillage pessimiste. Lorsque vous entrez dans la page, utilisez select... for update pour verrouiller l'enregistrement. À ce stade, les autres utilisateurs ne peuvent pas modifier l'enregistrement verrouillé en même temps.
Je vais faire ceci : ajoutez un champ, edit_num, +1 pour chaque modification, et comparez-le lorsque B doit être modifié.
Verrouillage optimiste Verrouillage optimiste Verrouillage optimiste
Un mécanisme de verrouillage optimiste est implémenté en ajoutant un champ de version aux données
Ajoutez un champ à la table de données
update_at
类型为TIMESATMP
,默认值为CURRENT_TIMESTAMP
, pas besoin de changer les autresChaque fois que les données sont mises à jour, la valeur sera mise à jour automatiquement
Ajoutez un champ de version à ces données. Le numéro de version commence à 0 par défaut. Il s'incrémentera automatiquement s'il n'est pas modifié. Vérifiez simplement si cette version est cohérente avec la version dans la base de données à chaque fois qu'elle est soumise.
Ajoutez un champ de numéro de version à la table xxx