elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  ¿alguna funcion similar a las secciones criticas de windows pero en sql?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿alguna funcion similar a las secciones criticas de windows pero en sql?  (Leído 749 veces)
Filantropo

Desconectado Desconectado

Mensajes: 45


Ver Perfil
¿alguna funcion similar a las secciones criticas de windows pero en sql?
« 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.


« Última modificación: 20 Abril 2020, 04:45 am por Filantropo » En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.706


WOS & Khan & Calero LDN


Ver Perfil WWW
Re: ¿alguna funcion similar a las secciones criticas de windows pero en sql?
« Respuesta #1 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-?


En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
ThunderCls


Desconectado Desconectado

Mensajes: 450


Coder | Reverser | Gamer


Ver Perfil WWW
Re: ¿alguna funcion similar a las secciones criticas de windows pero en sql?
« Respuesta #2 en: 16 Abril 2020, 17:25 pm »

Has intentado usar Transactions/Isolation Levels?, creo que con eso puedes hacer lo que quieres
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Filantropo

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: ¿alguna funcion similar a las secciones criticas de windows pero en sql?
« Respuesta #3 en: 20 Abril 2020, 04:44 am »

Has intentado usar Transactions/Isolation Levels?, creo que con eso puedes hacer lo que quieres
Gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines