Mysql
 sql >> Base de données >  >> RDS >> Mysql

mySQL - Verrouillage de table vs verrouillage de ligne

Si vous avez un index sur tblAreas.AreaID, alors toute transaction qui inclut WHERE tblAreas.AreaID in (...) verrouillera l'index de ces entrées. Peu importe que les lignes elles-mêmes existent ou non. Ce verrou empêchera une autre transaction d'insérer des entrées pour ces identifiants. Je ne pense donc pas que vous ayez besoin de suivre l'une ou l'autre de vos suggestions. Il suffit de demander si toutes les zones sont disponibles pour votre territoire pour obtenir les verrous dont vous avez besoin pour insérer votre territoire de manière atomique.

Cela peut être un peu problématique car vos identifiants de zone ne sont pas uniques à l'échelle du jeu, il peut donc y avoir une fausse sérialisation entre les zones avec le même identifiant dans différentes cartes. Il peut être utile d'ajouter mapID à votre table tblAreas afin que vous puissiez créer un index (mapID, areaID) à rechercher à la place, ce qui éviterait les fausses collisions sur l'index. (Cela dénormaliserait votre schéma, ce que vous ne voudriez peut-être pas faire pour d'autres raisons.)