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 :
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>
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!