Dos usuarios editan el mismo registro a la vez y los cambios de uno pisan los del otro. ¿Cómo lo evitás?
$ interview --rol dev
Evalúa la comprensión del problema de lost update y de las estrategias de concurrencia: bloqueo optimista con versionado, bloqueo pesimista y actualizaciones atómicas.
Es un lost update: los dos leen la versión N, cada uno guarda la suya y gana el último en escribir. Según el caso, hay varias soluciones.
1. Bloqueo optimista (lo más común en apps web)
Se agrega una columna version (o un updated_at) y se actualiza solo si nadie la cambió: Código: text
UPDATE productos
SET precio = :precio, version = version + 1
WHERE id = :id AND version = :version_leida;
Si la consulta afecta 0 filas, hubo un conflicto. Se devuelve 409 Conflict y el usuario recarga o se le ofrece hacer merge. En HTTP se puede exponer con ETag + If-Match, y la API responde 412 si no coincide. Los ORM lo traen incorporado, por ejemplo @Version en JPA o el concurrency token en EF Core.
2. Bloqueo pesimista
SELECT ... FOR UPDATE dentro de una transacción corta. Sirve cuando la contención es alta y reintentar sale caro. Nunca hay que mantener el lock mientras el usuario piensa frente al formulario, y hay que vigilar los deadlocks: tomar los locks en orden consistente y usar timeouts.
3. Actualizaciones atómicas
Para contadores o stock no hace falta leer y escribir por separado: Código: sql
UPDATE productos SET stock = stock - 1
WHERE id = :id AND stock > 0;
Criterio: optimista para ediciones de usuarios con pocos conflictos, pesimista para secciones críticas cortas y con mucha contención, y operaciones atómicas siempre que se puedan expresar en una sola sentencia. Subir el nivel de aislamiento (REPEATABLE READ o SERIALIZABLE) también ayuda, pero exige manejar reintentos.
Errores comunes
Proponer solo "usar una transacción", sin entender que con READ COMMITTED el lost update sigue ocurriendo. Olvidar chequear las filas afectadas, o mantener locks pesimistas durante la interacción del usuario.
Redactado con el asistente Underc0de IA. Actualizado el 12/11/2026. ¿Ves un error? Contanos en el foro.