¿Hay alguna manera de informar a los usuarios que un registro está bloqueado por otro?

Existen innumerables enfoques para este problema muy básico. No estoy familiarizado con los detalles del modelo de concurrencia de MySQL, por lo que mi respuesta será genérica.

  • Si está editando registros de una sola tabla, la base de datos se encargará de esto automáticamente. Establezca el nivel de aislamiento en lectura repetible y bloquee el tiempo de espera en algo corto; si en la actualización de la base de datos, la excepción equivale a “registro bloqueado”, informe al usuario. Puede iniciar la transacción intentando actualizar, por ejemplo, la clave principal para sí mismo, de modo que el usuario obtenga esta información de inmediato. (Si la base de datos tiene un nivel de aislamiento donde el actualizador bloquea a los lectores, esto no es necesario; de nuevo, el uso de dicho nivel de aislamiento impide la presentación de informes).
  • Si esta ocurrencia es rara, puede evitar bloqueos largos de la base de datos mediante la implementación de un bloqueo optimista utilizando una versión o columna de marca de tiempo. Entonces la segunda actualización fallará, si comenzó a partir de datos obsoletos.
  • Si las ediciones son largas e involucran varias tablas, puede considerar el bloqueo a nivel de aplicación del registro “principal”. Pase el mouse, esto es bastante propenso a errores: los errores o el bloqueo de la aplicación tenderán a dejar el registro en estado bloqueado.