Maison  >  Article  >  base de données  >  Comment implémenter le verrouillage optimiste dans MySQL

Comment implémenter le verrouillage optimiste dans MySQL

WBOY
WBOYoriginal
2022-02-24 10:59:089084parcourir

Dans MySQL, vous pouvez utiliser le mécanisme d'enregistrement de la version des données pour implémenter le verrouillage optimiste. Ajoutez un champ de version à la table de données. Le numéro de version enregistré est incrémenté de un pour chaque opération. Déterminez si la valeur de la version est égale à la valeur. juste interrogé. Si égal, alors effectuez une mise à jour, sinon égal, ne mettez pas à jour.

Comment implémenter le verrouillage optimiste dans MySQL

L'environnement d'exploitation de ce tutoriel : système windows10, version mysql8.0.22, ordinateur Dell G3.

Comment implémenter le verrouillage optimiste dans mysql

Méthode d'implémentation

1. Utilisez le mécanisme d'enregistrement de version des données pour l'implémenter. Il s'agit de la méthode d'implémentation de verrouillage optimiste la plus couramment utilisée.

2. Version des données, c'est-à-dire ajouter un identifiant de version aux données, généralement en ajoutant un champ de version numérique à la table de la base de données. Lors de la lecture des données, la valeur du champ version est lue ensemble à chaque fois que les données sont mises à jour, la valeur de la version est augmentée de 1. Lorsque nous soumettons une mise à jour, nous comparons les informations de version actuelle de l'enregistrement correspondant dans la table de base de données avec la valeur de version extraite pour la première fois si le numéro de version actuel de la table de base de données est égal à la valeur de version extraite pour la première fois. la première fois, elles seront mises à jour. Dans le cas contraire, elles seront considérées comme des données expirées.

Exemple

update TABLE
set value=2,version=version+1
where id=#{id} and version=#{version}

Le verrouillage optimiste n'est pas inclus dans la base de données et doit être implémenté par nous-mêmes.

Le verrouillage optimiste signifie que lors de l'exploitation de la base de données (opération de mise à jour), l'idée est très optimiste que cette opération ne provoquera pas de conflits lors de l'exploitation des données, aucun autre traitement spécial (c'est-à-dire aucun verrouillage) n'est effectué, et après la mise à jour, vérifiez s'il y a un conflit. L’idée générale est l’idée CAS.

L'implémentation habituelle est la suivante : lors de l'exploitation (mise à jour) des données dans la table, ajoutez d'abord un champ version (version) à la table de données et augmentez le numéro de version de cet enregistrement de 1 pour chaque opération. C'est-à-dire qu'il faut d'abord interroger l'enregistrement et obtenir le champ de version. Si vous souhaitez exploiter (mettre à jour) cet enregistrement, déterminez d'abord si la valeur de la version à ce moment est égale à la valeur de la version qui vient d'être interrogée. sont égaux, alors expliquez. Pendant cette période, si aucun autre programme n'opère dessus, vous pouvez effectuer une mise à jour et ajouter 1 à la valeur du champ version s'il s'avère lors de la mise à jour que la valeur de la version à ce moment n'est pas égale ; à la valeur de version qui vient d'être obtenue, cela signifie que cette période a été écoulée. Si d'autres programmes opèrent dessus, l'opération de mise à jour ne sera pas effectuée.

Exemple :

L'opération de commande comprend 3 étapes :

1. Interroger les informations d'inventaire :

select (id,count,version) from t_goodsku where id=#{id}

2. Déduire 2 stocks :

Calcul dans le programme : nombre = nombre - 2 ; :

update t_goodsku
set count={count},version=version+1
where id=#{id} and version=#{version};

La version trouvée à l'étape 1 est en fait un instantané (mécanisme MVCC sous mécanisme d'isolement en lecture validée et répétable en lecture). Dans ce cas, lors de la mise à jour à l'étape 3, acquérez le verrou et la condition où La version =). #{version} dans le jugement compare en fait la version actuelle avec la version de l'instantané à l'étape 1. Si la comparaison réussit, cela signifie que ces données n'ont pas été mises à jour par d'autres threads pendant cette période, la mise à jour est réussie.

Si la comparaison échoue, cela signifie que ces données ont été mises à jour pendant cette période, puis la mise à jour échoue, une erreur est signalée et la restauration ou la rotation est signalée.

Bien sûr, il s'agit de simuler le scénario de verrouillage optimiste. En fait, la mise à jour de l'inventaire peut être réalisée en une seule étape :

1 Mettre à jour l'inventaire :

update t_goodsku
set count=count -2
where id=#{id};

Apprentissage recommandé :

Tutoriel vidéo mysql

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn