Forma correcta de manejar la concurrencia en SQL

Forma correcta de manejar la concurrencia en SQL

Postby miarcod » Wed Nov 04, 2020 5:33 pm

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  Expand view
SELECT ......

Un usuario selecciona una tarea para consultar.
Code: Select all  Expand view
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  Expand view
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  Expand view
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
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Forma correcta de manejar la concurrencia en SQL

Postby xmanuel » Wed Nov 04, 2020 7:23 pm

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/tecnicas-de-bloqueo-sobre-base-de-datos-bloqueo-pesimista-y-bloqueo-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:
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Forma correcta de manejar la concurrencia en SQL

Postby miarcod » Wed Nov 04, 2020 8:36 pm

Gracias por responder
Las pruebas las estoy realizando con Tdolphin y MariaDb
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 98 guests