Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Filantropo en 16 Abril 2020, 06:22 am



Título: ¿alguna funcion similar a las secciones criticas de windows pero en sql?
Publicado por: Filantropo en 16 Abril 2020, 06:22 am
En una tabla de usuarios

tbUsuarios
    nombre
    clave
    email
    telefono

Lo que trato es imitar el comportamiento de la restriccion unique sobre el campo nombre que debe ser unico, en el procedimiento almacenado de insercion lo que hace es comprobar si algun usuario ya tiene el mismo nombre, si aun no entonces lo inserta pero si ya esta en uso NO inserta solo genera un error, tengo este codigo:

Código:


Create proc sp_insertar_usuario(in_nombre, in_clave, in_email, in_telefono)
Begin
    'Verificar si ya eziste un usuario con ese nombre
    filas=select count (*) from tbusuario where nombre=in_nombre
    If filas>0
          -- ya existe, generar error y no insertar
    Else
         -- no existe aun, proceder insercion
         insert into tbusuario (nombre,clave,email,telefono)
End



Ahora la duda que tengo es que... sabiendo que una BD puede ser accedida por muchos aplicaciones en simultaneo y ademas que los procesos de aplicacion suelen crear varios hilos de ejecucion se me ocurrio que podria suceder que 2 apps traten de insertar al mismo tiempo usuarios con el mismo nombre y se ejecuta el sp_insertar_usuario 2 veces al mismo tiempo, al llegar al select ambos tienen el mismo resultado : "0"
lo que significa quew el nombre todavia no esta en uso y llegan al if donde procede a realizar ambas inserciones con el mismo nombre, podria ocurrir un caso como este y como se podria evitar?
En windows c++ ocurrian casos como este de acceso simultaneo a uns funcion y se usaba las secciones criticas para impedirlo.


Título: Re: ¿alguna funcion similar a las secciones criticas de windows pero en sql?
Publicado por: Shell Root en 16 Abril 2020, 14:58 pm
Si crees que es muy posible que se ejecuten al mismo tiempo el script -teniendo en cuenta, horas/minutos/segundo/milisegundos-?


Título: Re: ¿alguna funcion similar a las secciones criticas de windows pero en sql?
Publicado por: ThunderCls en 16 Abril 2020, 17:25 pm
Has intentado usar Transactions/Isolation Levels?, creo que con eso puedes hacer lo que quieres


Título: Re: ¿alguna funcion similar a las secciones criticas de windows pero en sql?
Publicado por: Filantropo en 20 Abril 2020, 04:44 am
Has intentado usar Transactions/Isolation Levels?, creo que con eso puedes hacer lo que quieres
Gracias.