Mysql
 sql >> Database >  >> RDS >> Mysql

mySQL:blocco della tabella rispetto al blocco della riga

Se hai un indice su tblAreas.AreaID, qualsiasi transazione che includa WHERE tblAreas.AreaID in (...) bloccherà l'indice per quelle voci. Non importa se le righe stesse esistono o meno. Tale blocco impedirà a un'altra transazione di inserire voci per quegli ID. Quindi non penso che tu debba seguire nessuno dei tuoi suggerimenti. Basta interrogare per vedere se tutte le aree sono disponibili per il tuo territorio ti darà le serrature necessarie per inserire il tuo territorio in modo atomico.

Questo potrebbe essere un po' un problema poiché i tuoi ID area non sono univoci a livello di gioco, quindi potrebbe esserci una falsa serializzazione tra aree con lo stesso ID in mappe diverse. Potrebbe essere utile aggiungere mapID alla tabella tblAreas in modo da poter creare un indice (mapID, areaID) da cercare, il che eviterebbe false collisioni sull'indice. (Ciò denormalizzerebbe il tuo schema, cosa che potresti non voler fare per altri motivi.)