Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/10/2014, 04:07
asardon
 
Fecha de Ingreso: octubre-2014
Ubicación: Bilbao
Mensajes: 14
Antigüedad: 9 años, 7 meses
Puntos: 0
Presentación y consulta

Hola:

Soy nuevo en el foro y he llegado a él buscando una respuesta a la cuestión de la concurrencia. He mirado en el área de faq pero no he encontrado nada de este tema y no he visto o no he sabido encontrar algo como un formulario para hacer búsquedas en una base de datos del foro donde se pueda hacer búsquedas por temas.

Mi pregunta es la siguiente: ¿Cómo resuelven en php y mysql el problema de la concurrencia a la hora de modificar datos en una base de datos de mysql? Es decir, el usuario1 hace las siguientes operaciones:

1. Recupera un registro de una tabla de la bd (select).
2. Rellena los campos de un formulario de edición con esos datos.
3. Modifica los campos del formulario.
4. Guarda los nuevos datos en la bd (update).

En lo que va del paso 1 al paso 4 el usuario2 accede al mismo registro y lo borra, o bien hace su propio update antes de que el usuario1 acabe. Con lo cual:

Cuando el usuario1 intente hacer el update se producirá un error o se cargará la modificación que halla hecho el usuario2.

Inicialmente pensé en usar un semáforo o flag que indique si ese registro está tomado o está siendo editado por otro usuario y, si es así, que no permita modificalo. Pero eso no resuelve el problema, ya que:

1. compruebo si el semáforo está en verde (select).
2. Si está en verde recupero los datos del registro a un formulario (select).
3. Pongo el semáforo en rojo (update).
4. Modifico los campos del formulario.
5. Modifico el registro de la tabla y pongo el semáforo en verde (update).

Entre el paso 1 y 3 otro usuario podría eliminar el registro o modificarlo. Daría igual si el paso 1 y 2 los haría en uno sólo, porque entre la comprobación a verde del semáforo y su cambio a rojo siempre mediaría un tiempo en el que se me puede meter alguien.

Muchas gracias de antemano y un saludo.
--
Agustín Sardón