tbUsuarios
nombre
clave
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.