[SOL] Bloqueo de tablas

<< < (2/3) > >>

^Tifa^:
Si efectivamente eso es correcto. (aunque no se nada sobre PHP).

Recuerda  ❶ que en el CPU como tal nada (aunque digan que es multitarea y corre 2 procesos a la vez) nada, realmente ejecuta 2 procesos a la vez (Por eso se ha creado semaforos, memoria compartida, colas, etc, etc), asi  mismo ocurre en el motor de base de datos, la diferencia de ejecucion de una consulta u otra se diferenciaran por fraciones de milisegundos (nanosegundos en este caso, estan en cache de memoria).

Pero yo particularmente, no recomendaria esto por la masivas lockeos y deslockeos en fraciones de nanosegundos por una consulta generada por usuarios, como ya habia expuesto.

PD: He supuesto que la conexión mediante el script no se hara siempre con el mismo usuario, ya que no tendria mucha logica lockear una tabla si se usa un unico usuario, el lockeo no aplicaria para este solo si es de lectura, esto sin contar que el mismo ha afirmado que lo prueba por shell y phpadmin y funciona, entonces supongo que no se refiere a un unico usuario.

DickJunior:
Enderezo mas la pregunta y voy al punto.

Supongamos que se tiene un sistema en el que tenemos entre muchas, 2 tablas (padre, hijo ... la relacion es de 1 a muchos) ... el usuario A ingresa al sistema y se dispone de registrar a un hijo, el formulario es parecido a esto:

<form>
 seleccione padre <select></select>
 nombre de hijo <input>
 ... (muchos campos mas)
</form>

Mientras que el usuario A selecciono el padre y se encuentra llenando los demas campos, un usuario B ingreso al sistema desde otra terminal y se le ocurrio eliminar al padre que el usuario A usaria para registrar un hijo.

Solucion : Cuando el usuario A seleccione el padre, el registro se debe bloquear de tal forma que nadie pueda tener acceso a el.

La idea es esa.

^Tifa^:
Bueno DickJunior, segun lo expresado por ti finalmente, el ejemplo expresado por mi (realizar 3 peticiones en 1 sola consulta) no aplicaria para tu caso. No se como vaya en PHP (Si por cada consulta SQL realize conexión a la DB, preparar consulta, aplicar consulta y salir) porque si en PHP funciona de esta manera, aun lograras la manera de validar la sección de usuario y enviar un lock table, al finalizar la consulta se eliminaria de la cache de memoria y las tablas quedarian en unlock. La unica via de poder aplicar un lock table y que permanezca funcional como esperas que hagas, seria mantener una sección conectada en el motor DB sin deslogearse, poder llenar un formulario mientras tanto para finalmente, enviar 1 sola consulta:

Código
INSERT INTO TABLA VALUES('algo'); UNLOCK TABLES;

Lamentablemente yo no se como PHP maneja las conexiones al motor de base de datos o como hacer una especie de memlock de PHP en el motor que permita que identifiques un usuario con una DB y se mantenga ahi en sección logeado hasta que llenes tu formulario y pulses enviar.

Espero de antemano, que en la sección PHP te clarifiquen si es posible esto dentro de PHP como tal, autentificar una consulta SQL y permanecer anclado al motor hasta que ocurra un evento en PHP.

DickJunior:
He pensando en implementar una tabla en la bd con los siguientes campos:

Citar

tabla concurrencia
 codigo int,
 tabla varchar(30),
 primary int,
 sesion varchar(30),
 tiempo timestap

La idea es que cuando un usuario A acceda a un registro de la tabla cliente (supongamos al cliente cuyo primary key sea CL01A01) se inserte en la tabla concurrencia los campos:

Citar

codigo que es el codigo autogenerado del registro
tabla que es en este caso cliente
primary que es en este caso CL01A01, el codigo del registro actual
session que es en este caso el id de la session del usuario A
tiempo que es en este caso la fecha y hora que se genero el registro

La idea es que si un usuario B quiera ingresar al modificar algun registro, antes debe buscarlo en la tabla concurrencia, si el codigto de registro que se quiere modificar esta en dicha tabla le mostrar un mensaje diciendole que otro usuario lo esta usando, pero sino tendra libre acceso a el.

Lo que aun no se como hacer es eliminar el registro de la tabla concurrencia en el caso que el usuario A cierre directamente el navegador. Que opinan sobre esto, es valido ?  es correcto?  es efectivo ?

Saludos.

DickJunior:
Editdo

Eliminar post.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior