Maison >base de données >tutoriel mysql >Comment utiliser efficacement SELECT FOR UPDATE dans SQL Server et éviter les blocages ?

Comment utiliser efficacement SELECT FOR UPDATE dans SQL Server et éviter les blocages ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-31 14:49:10392parcourir

How to Efficiently Use SELECT FOR UPDATE in SQL Server and Avoid Deadlocks?

SELECT FOR UPDATE avec SQL Server : compréhension et dépannage

Dans SQL Server, l'instruction SELECT FOR UPDATE est utilisée pour acquérir un verrou sur les lignes récupérées, empêchant les autres connexions de les modifier ou de les supprimer jusqu'à ce que la transaction qui a émis la requête soit terminée. Cela peut être utile dans les scénarios dans lesquels vous souhaitez garantir un accès exclusif aux données lors de mises à jour ou de modifications.

Cependant, il est essentiel d'utiliser le mécanisme de verrouillage approprié pour éviter un comportement de blocage involontaire. Dans SQL Server 2005 avec le niveau d'isolement READ_COMMITTED et READ_COMMITTED_SNAPSHOT=ON, l'indicateur WITH (updlock) peut être utilisé pour implémenter un SELECT FOR UPDATE.

Malheureusement, dans l'exemple fourni, l'utilisation de WITH (updlock) a tout bloqué d'autres connexions, même pour sélectionner des lignes avec des identifiants différents. En effet, updlock acquiert un verrou de plage sur l'ensemble de la table, empêchant tout autre accès jusqu'à ce que le verrou soit libéré.

Pour obtenir le comportement souhaité consistant à verrouiller uniquement la ligne spécifique sélectionnée, il est recommandé d'utiliser l'indice ROWLOCK. plutôt. Cet indice acquiert un verrou uniquement sur la ligne sélectionnée, permettant à d'autres connexions d'accéder à différentes lignes de la table sans être bloquées.

Voici un exemple mis à jour :

SELECT * FROM example WITH (ROWLOCK) WHERE>

Cette instruction acquerra un verrouiller uniquement sur la ligne avec id=1, permettant aux autres connexions de continuer à accéder aux autres lignes du tableau d'exemple.

Il est important de noter que le comportement de verrouillage peut également être influencé par d’autres facteurs, tels que les niveaux d’isolement des transactions et les index. Dans votre cas, vous avez mentionné avoir rencontré des problèmes de blocage. Des blocages peuvent se produire lorsque deux transactions ou plus s'attendent pour libérer les verrous sur les mêmes lignes. Pour éviter les blocages, il est recommandé d'utiliser l'isolation des instantanés ou de mettre en œuvre des politiques de gestion des transactions appropriées, telles que des tentatives de blocage ou des délais d'expiration de verrouillage.

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