sql >> Base de Datos >  >> RDS >> Mysql

mySQL - Bloqueo de tablas vs bloqueo de filas

Si tiene un índice en tblAreas.AreaID, entonces cualquier transacción que incluya WHERE tblAreas.AreaID in (...) bloqueará el índice para esas entradas. No importa si las filas mismas existen o no. Ese bloqueo evitará que otra transacción inserte entradas para esos ID. Así que no creo que necesites hacer ninguna de tus sugerencias. Solo consultando para ver si todas las áreas están disponibles para su territorio obtendrá los candados que necesita para insertar su territorio de forma atómica.

Esto podría ser un pequeño problema ya que las ID de su área no son únicas en todo el juego, por lo que puede haber una serialización falsa entre áreas con la misma ID en diferentes mapas. Puede ser útil agregar mapID a su tabla tblAreas para que pueda hacer un índice (mapID, areaID) para buscar en su lugar, lo que evitaría colisiones falsas en el índice. (Eso desnormalizaría su esquema, lo que quizás no quiera hacer por otras razones).