Bien que MySQL ne prenne pas en charge le verrouillage optimiste de manière native, il peut être implémenté via des constructions SQL standard et une logique de code .
Aucune approche de verrouillage :
Dans cette approche, aucun verrouillage explicite n'est utilisé. Cependant, la cohérence des données n'est pas garantie si plusieurs utilisateurs mettent à jour les mêmes données simultanément.
SELECT data from theTable WHERE iD = @theId; {code that calculates new values} UPDATE theTable SET val1 = @newVal1, val2 = @newVal2 WHERE iD = @theId;
Approche de verrouillage optimiste :
Cette approche inclut la vérification des modifications avant de valider le mise à jour. Si une modification s'est produite, généralement déterminée par le contrôle de version des lignes ou par des contrôles d'égalité, la mise à jour est rejetée.
SELECT iD, val1, val2 FROM theTable WHERE iD = @theId; {code that calculates new values} UPDATE theTable SET val1 = @newVal1, val2 = @newVal2 WHERE iD = @theId AND val1 = @oldVal1 AND val2 = @oldVal2; {if AffectedRows == 1 } {go on with your other code} {else} {decide what to do since it has gone bad... in your code} {endif}
Verrouillage optimiste de version :
Similaire au verrouillage optimiste approche, cette technique utilise une colonne de version pour vérifier les modifications.
SELECT iD, val1, val2, version FROM theTable WHERE iD = @theId; {code that calculates new values} UPDATE theTable SET val1 = @newVal1, val2 = @newVal2, version = version + 1 WHERE iD = @theId AND version = @oldversion; {if AffectedRows == 1 } {go on with your other code} {else} {decide what to do since it has gone bad... in your code} {endif}
Transactions et niveaux d'isolement :
Les transactions peuvent être utilisées conjointement avec un verrouillage optimiste pour garantir cohérence des données. Cependant, le choix du niveau d'isolement des transactions peut affecter l'efficacité du verrouillage optimiste.
Test et vérification :
Pour garantir que le verrouillage optimiste est correctement mis en œuvre, il est recommandé de effectuez des tests et des vérifications approfondis en utilisant différents scénarios et niveaux d'isolement.
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!