Hola a todos, despues de leer aqui bastantes post sobre este tema y buscar informacion en la web, todavía no he conseguido aprender bien el funcionamiento de bloqueos a nivel de registros en tablas InnoDB, tambien he hecho pruebas con transacciones pero no consigo que me funcione bien.
Si alguien conoce algun enlace o curso sobre este tema que lo explique bien con ejemplos se lo agradecería mucho.
Trabajando desde un servidor en localhost he probado crearme desde php 2 conexiones a la misma base de datos con dos usuarios diferentes que tengan acceso a esa base de datos.
He estado usando conexiones persistentes con mysql_pconnect(), he intentado realizar consultas para conseguir bloqueos. Solo he conseguido bloquear con:
begin;
SELECT `innotest`.`campo`, `innotest`.`nombre`
FROM innotest
WHERE (`innotest`.`campo` =1) LOCK IN SHARE MODE
Me bloquea este registro pero si despues intento UPDATE incluso desde la misma conexion el navegador queda bloqueado hasta que pasan 30 segundos y recibo el tipico mensaje de error de php: "Maximum execution time of 30 seconds exceeded.
aunque intente despues en conexion 1 hacer:
COMMIT;
la unica forma que consigo de desbloquear es reinicializar el servidor local;
Tambien he probado en conexion 1:
begin;
SELECT `innotest`.`campo`, `innotest`.`nombre`
FROM innotest
WHERE (`innotest`.`campo` =1) for update
he continuado en la conexion 2 para comprobar bloqueo con:
UPDATE innotest SET nombre="manolo" WHERE campo=1;
pero me ha permitido la actualizacion sin recibir error
Lo que intento programar es :
1: bloquear un registro
2: poder editarlo modificando sus campos (imagino que habrá que hacerlo dentro de un tiempo establecido)
3: actualizarlo en la base de datos con UPDATE
4: desbloquearlo para que otros usuarios puedan nuevamente realizar actualizaciones a dicho registro.
Espero ayuda muchas gracias de antemano.