L'absence de blocages est un problème incroyablement coûteux dans le cas général, car vous devez connaître toutes les tables/objets que vous allez lire et modifier pour chaque transaction en cours (y compris les SELECT). La philosophie générale s'appelle verrouillage biphasé strict et ordonné (à ne pas confondre avec l'engagement biphasé) ( http://en.wikipedia.org/wiki/Two_phase_locking même 2PL n'est pas garantie pas de blocages)
Très peu de SGBD mettent en œuvre un système 2PL strict en raison de l'impact considérable sur les performances (il n'y a pas de repas gratuit) lorsque toutes les transactions attendent l'exécution d'une simple instruction SELECT.
Quoi qu'il en soit, si ce sujet vous intéresse vraiment, jetez un coup d'œil à SET ISOLATION LEVEL
dans SQL Server. Vous pouvez modifier cela si nécessaire. http://en.wikipedia.org/wiki/Isolation_level
Pour plus d'informations, voir wikipedia sur Serializability : http://en.wikipedia.org/wiki/Serializability
Cela dit, une bonne analogie est celle des révisions du code source : vérifiez tôt et souvent. Faites en sorte que vos transactions soient petites (en nombre d'instructions SQL, en nombre de lignes modifiées) et rapides (le temps d'horloge aide à éviter les collisions avec d'autres). Il peut être agréable et ordonné de faire BEAUCOUP de choses dans une seule transaction - et en général, je suis d'accord avec cette philosophie - mais si vous rencontrez beaucoup de blocages, vous pouvez diviser la transaction en plusieurs petites transactions et vérifier leur état dans l'application au fur et à mesure que vous avancez. TRAN 1 - OK Y/N ? Si O, envoyer TRAN 2 - OK O/N ? etc. etc.
Soit dit en passant, au cours de mes nombreuses années d'expérience en tant que DBA et développeur (d'applications de bases de données multi-utilisateurs mesurant des milliers d'utilisateurs simultanés), je n'ai jamais trouvé que les blocages étaient un problème si important que je devais en prendre conscience (ou changer les niveaux d'isolation bon gré mal gré, etc.).