Page 1 of 1

Forma correcta de manejar la concurrencia en SQL

Posted: Wed Nov 04, 2020 5:33 pm
by miarcod
Un saludo a todos

La question es que me planteo si lo que estoy haciendo es correcto o tendré problemas futuros,

Estoy haciendo pruebas en SQL y tengo programado el proceso de concurrencia como sigue:

1 Muestro en un browse una serie de tareas para realizar

Code: Select all

SELECT ......
Un usuario selecciona una tarea para consultar.

Code: Select all

SELECT ... FOR id=xxx
El usuario intenta seleccionar la tarea para realizar (actualizacion). En este momento necesito asegurarme que otro usuario no intente "actualización" modificar esta misma tarea.

Code: Select all

 START TRANSACTION...
  SELECT .... FOR Id=xxx FOR UPDATE
  Vuelvo a presentar los datos (por si se modificaron desde otro terminal)
 
5 El usuario finaliza la actualización de la tarea, ya sea grabando, cancelando o por timeout

Code: Select all

COMMIT
Bien, el proceso se ejecuta correctamente y si otro usario intenta acceder al mismo registro se produce un error que puedo controlar.

¿Es esta la forma correcta de realizarlo o debería plantearme otras alternativas (tablas de bloqueos,...) ?

Un saludo y gracias por vuestra atención

Re: Forma correcta de manejar la concurrencia en SQL

Posted: Wed Nov 04, 2020 7:23 pm
by xmanuel
SQL es un estándar y luego hay extensiones que introducen cada gestor de bases de datos. Por lo tanto deberías decir en que gestor vas a trabajar.
Básicamente existen dos tipos de bloqueos en las bases de datos SQL el bloqueo optimista y el pesimista. Deberías consultar a Google o mira esto https://unpocodejava.com/2011/01/10/tec ... optimista/
Por otro lado realmente en el tema de los UPDATE y DELETE no se producen errores como tales si no exepciones que tu desde tu programa podrás controlar y actuar como desees el comportamiento. Para ello se suele usar las sentencias:
try
// Sentencia de actualizacion o delete
catch
// Control del numero de exepcion y accion a ejecutar
end

Luego también tendrás que usar alguna librería que te permita acceder e interactuar con la base de datos como por ejemplo HDO que puede funcionar con:
- SQLite/SQLCipher
- MySQL/MariaDB
- SQLServer
- ODBC ( Oracle, Postgres, Access, y cualquier otro gestor que tenga un driver ODBC )

Espero haber resuelto alguna duda. :wink:

Re: Forma correcta de manejar la concurrencia en SQL

Posted: Wed Nov 04, 2020 8:36 pm
by miarcod
Gracias por responder
Las pruebas las estoy realizando con Tdolphin y MariaDb