Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

193
Vistas
Condición de carrera de banca SQL

Estoy construyendo un sistema bancario en NodeJS y una base de datos SQL. Las dos funcionalidades principales que necesito son depositar y retirar. Quiero asegurarme de que no haya condiciones de carrera.

Ejemplo: el usuario tiene un saldo de 100 $ y retira 100 $ dos veces rápidamente y termina con -100 $.

¿La siguiente consulta puede tener condiciones de carrera?

update account set balance = balance - x where balance > x

Si esto no resuelve el problema:

Si uso PostgreSQL, ¿será suficiente una restricción de verificación en mi columna de saldo para eliminar todas las condiciones de carrera?

Si uso MySQL, ¿cuáles son mis opciones?

Tengo curiosidad sobre cuáles son las diferentes formas de lograr esto tanto en PostgreSQL como en MySQL.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Entonces, puedes hacer lo siguiente:

  • Establezca la confirmación automática en falso dentro de la función de withdraw() , es decir, inicie una nueva transacción.
  • Use SELECT .. FOR UPDATE para leer el registro
  • Realizar controles de valor (es decir, si la cantidad es suficiente para realizar la operación)
  • UPDATE el valor
  • Terminar la transacción

Ahora, cuando el usuario intente retirarse dos veces rápidamente, una de las llamadas iniciará la transacción y emitirá la llamada SELECT.. FOR UPDATE , que bloqueará la lectura de datos del otro subproceso. Solo se desbloqueará una vez que finalice el primer subproceso, es decir, evitará la race condition .

Aquí está la documentación de MySQL al respecto.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda