Por ejemplo, un usuario ejecuta una consulta como esta:

UPDATE table SET column = 100;

Y segundo usuario:

UPDATE table SET column = 200;

Y digamos, estas dos consultas se solicitan exactamente el mismo tiempo, los mismos segundos, los mismos nanosegundos (o la unidad de medida de tiempo mínimo, que es para esta base de datos), luego qué consulta se ejecutará primero y cuál segundo ?

¿La base de datos en este caso elegirá la secuencia de consultas al azar?

PD. No etiqueto ninguna base de datos concreta, creo que este mecanismo para todos los principales RDBMS es similar. ¿O tal vez no?

1
Oto Shavadze 15 dic. 2016 a las 19:14

2 respuestas

La mejor respuesta

Los RDBMS implementan un conjunto de propiedades abreviado (y llamado) ACID. Wikipedia explica el concepto.

Básicamente, las bases de datos que cumplen con ACID bloquean los datos en algún nivel (los bloqueos de tablas, páginas y filas son típicos). En principio, solo se puede adquirir un bloqueo de escritura para el mismo objeto al mismo tiempo. Entonces, la base de datos bloqueará arbitrariamente la fila para una de las transacciones.

¿Qué pasa con la otra transacción? Eso depende, pero debería suceder una de dos cosas:

  • La transacción espera hasta que el candado esté disponible. Entonces "al final", asignará el valor (perder el candado, ganar la guerra;).
  • La transacción "expirará" porque las filas correspondientes no están disponibles.

Su caso es bastante más complicado, porque todas las filas de una tabla se ven afectadas. Sin embargo, al final, todas las filas deberían tener el mismo valor en una base de datos compatible con ACID.

Debo señalar que las principales bases de datos son (generalmente) compatibles con ACID. Sin embargo, a pesar de que tienen bloqueos y transacciones y mecanismos similares, los detalles pueden variar y varían entre las bases de datos.

2
Gordon Linoff 15 dic. 2016 a las 16:19

Normalmente, las operaciones DML se realizan adquiriendo bloqueos DML , con la ayuda de los cuales las operaciones se hacen atómicas y coherentes . Entonces, en su caso, a cualquiera de las consultas se le asignará el bloqueo DML y se ejecutará y luego la segunda continuará de manera similar. cuál va primero y segundo no se conoce como tal.

1
Gurwinder Singh 15 dic. 2016 a las 16:19