Maison > base de données > tutoriel mysql > le corps du texte

Comment pouvez-vous implémenter le verrouillage optimiste dans MySQL sans support natif ?

Mary-Kate Olsen
Libérer: 2024-10-29 21:53:02
original
677 Les gens l'ont consulté

How Can You Implement Optimistic Locking in MySQL Without Native Support?

Verrouillage optimiste dans MySQL : un examen plus approfondi

Le verrouillage optimiste, une technique utilisée pour gérer les mises à jour simultanées dans une base de données, n'est pas pris en charge de manière native par MySQL. Cependant, il peut être mis en œuvre grâce à une combinaison de pratiques de base de données et de code d'application.

Comment fonctionne le verrouillage optimiste

Le principe derrière le verrouillage optimiste est de supposer que les données ne seront pas conflit lors de mises à jour simultanées. En vérifiant l'intégrité des données avant la mise à jour, il permet de détecter les conflits et de prendre les actions appropriées.

En l'absence de transactions, un verrouillage optimiste est appliqué en incluant une instruction SELECT supplémentaire avant la UPDATE. Cette instruction SELECT récupère l'état actuel des données, qui est ensuite comparé à son état avant la tentative de mise à jour. Si les données ont changé, la mise à jour est annulée, préservant ainsi l'intégrité des données.

Utilisation du verrouillage optimiste dans MySQL

Pour implémenter le verrouillage optimiste dans MySQL, les étapes suivantes peuvent être effectuée dans le code de l'application :

  1. Exécuter une instruction SELECT pour récupérer l'état actuel des données.
  2. Effectuer des calculs ou d'autres opérations sur les données.
  3. Exécuter une UPDATE pour mettre à jour les données avec des critères de verrouillage optimistes (par exemple, WHERE COLUMN_NAME = @OLD_VALUE).
  4. Vérifiez le nombre de lignes affectées après l'instruction UPDATE. S'il est égal à 0, les données ont changé, indiquant un conflit, et la mise à jour peut être interrompue.

Exemple

Considérons l'exemple suivant :

<code class="sql">SELECT val1, val2 FROM theTable WHERE iD = @theId;

-- Perform data calculations

UPDATE theTable
SET val1 = @newVal1,
    val2 = @newVal2
WHERE iD = @theId
AND val1 = @oldVal1
AND val2 = @oldVal2;

-- Check the number of affected rows
IF @@ROWCOUNT = 1
-- Update successful
ELSE
-- Conflict detected
END</code>
Copier après la connexion

Méthodes alternatives de verrouillage optimiste

Outre l'approche SELECT-UPDATE-CHECK, le verrouillage optimiste peut également être implémenté à l'aide d'une colonne de version. Cette colonne est incrémentée à chaque fois que les données sont mises à jour et l'instruction UPDATE vérifie la version avant de mettre à jour la ligne. Si la version ne correspond pas, la mise à jour est annulée.

Considérations

Le verrouillage optimiste suppose que les conflits sont rares et que le coût de détection des conflits est inférieur à celui de l'utilisation du verrouillage pessimiste verrouillage (par exemple, via des transactions). Cependant, il peut ne pas convenir aux scénarios dans lesquels la concurrence est élevée et l'intégrité des données est cruciale.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal