Accès simultané avec SELECT... POUR LA MISE À JOUR
Introduction
SELECT... FOR UPDATE est une instruction SQL utilisée pour verrouiller les enregistrements de base de données lors des opérations de lecture. Cela garantit que les données restent inchangées lors de l'accès, évitant ainsi les problèmes d'incohérence.
Cas d'utilisation pour SELECT ... FOR UPDATE
Question 1 :
Le scénario donné démontre une situation dans laquelle SELECT ... FOR UPDATE peut être bénéfique. Le fil de discussion 1 doit répertorier toutes les pièces et leurs balises, mais il est essentiel de savoir si une pièce a été supprimée. L'utilisation de SELECT ... FOR UPDATE sur les salles empêcherait le thread 2 de supprimer la salle en question, garantissant ainsi que le thread 1 récupère des informations précises malgré l'opération de suppression simultanée.
Niveaux d'isolation simultanés
Question 2 :
Le choix entre SERIALIZABLE et Les niveaux d'isolement READ_COMMITTED avec SELECT ... FOR UPDATE dépendent du système de base de données utilisé.
MyISAM (MySQL) : Les tables sont verrouillées lors des requêtes, ce qui rend SELECT ... FOR UPDATE inutile.
SQL Server : Les requêtes SELECT placent des verrous partagés sur les enregistrements, tandis que les requêtes DML placent des verrous de mise à jour. SELECT ... FOR UPDATE agit comme un verrou de mise à jour, bloquant les opérations de suppression simultanées.
MVCC (Oracle, PostgreSQL, MySQL avec InnoDB) : Les opérations de lecture et d'écriture ne se bloquent généralement pas . Cependant, SELECT ... FOR UPDATE crée un verrou spécial qui empêche la suppression des enregistrements verrouillés, similaire au comportement de SQL Server.
REPEATABLE READ vs SERIALIZABLE
Question 2 (suite) :
Conclusion
L'utilisation de SELECT ... FOR UPDATE en conjonction avec des niveaux d'isolement appropriés est crucial pour maintenir la cohérence des données lors d'un accès simultané à la base de données. Cependant, les détails de mise en œuvre et les comportements requis peuvent varier en fonction du système de base de données sous-jacent.
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!