Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mySQL - Bloqueio de tabela vs bloqueio de linha


Se você tiver um índice em tblAreas.AreaID, qualquer transação que inclua WHERE tblAreas.AreaID in (...) bloqueará o índice para essas entradas. Não importa se as próprias linhas existem ou não. Esse bloqueio impedirá que outra transação insira quaisquer entradas para esses IDs. Então eu não acho que você precisa fazer qualquer uma das suas sugestões. Basta consultar para ver se todas as áreas estão disponíveis para o seu território para obter os bloqueios necessários para inserir seu território atomicamente.

Isso pode ser um pouco problemático, pois seus IDs de área não são exclusivos em todo o jogo, portanto, pode haver alguma serialização falsa entre áreas com o mesmo ID em mapas diferentes. Pode ajudar adicionar mapID à sua tabela tblAreas para que você possa fazer um índice (mapID, areaID) para procurar, o que evitaria colisões falsas no índice. (Isso desnormalizaria seu esquema, o que você pode não querer fazer por outros motivos.)