Bloqueo de hueco
Mecanismo de bloqueo de MySQL/InnoDB que bloquea el «hueco» entre valores de índice: no solo las filas existentes, sino el rango donde podrían insertarse filas nuevas. Impide las lecturas fantasma bajo Repeatable Read al bloquear las inserciones en un rango bloqueado.
El problema que resuelve: sin bloqueos de hueco, otra transacción podría insertar una fila nueva en mitad de un rango que acabas de leer y aparecería un «fantasma» que rompe Repeatable Read. El «next-key lock» de InnoDB combina un bloqueo de fila y uno de hueco: bloquea tanto la fila como el hueco anterior. Mecánica: SELECT ... WHERE x BETWEEN 10 AND 20 FOR UPDATE también bloquea los huecos, de modo que no pueden añadirse filas nuevas con x en ese rango. Contrapartida: protege contra los fantasmas pero puede provocar interbloqueos inesperados y frenar inserciones en apariencia ajenas, una fuente habitual de conflictos misteriosos de bloqueo en InnoDB. Los bloqueos de hueco desaparecen bajo Read Committed (una razón para bajar el aislamiento en ciertas cargas). Un comportamiento específico de InnoDB que suele sorprender.