Bloqueo optimista.
Pesimista es más difícil de implementar y dará problemas en un entorno web. ¿Qué acción liberará el bloqueo y cerrará el navegador? ¿Dejando la sesión a tiempo de espera? ¿Y si luego guardan sus cambios?
No especifica qué base de datos está utilizando. El servidor MS SQL tiene un tipo de datos de marca de tiempo. Sin embargo, no tiene nada que ver con el tiempo. Es un número que cambiará cada vez que se actualice la fila. No tiene que hacer nada para asegurarse de que se modifique, solo necesita verificarlo. Puede lograr resultados similares utilizando una fecha/hora modificada por última vez como lo sugiere @KM. Pero esto significa que debe recordar cambiar cada vez que actualice la fila. Si usa datetime, necesita usar un tipo de datos con la precisión suficiente para asegurarse de que no pueda terminar con el valor que no cambia cuando debería. Por ejemplo, alguien guarda una fila, luego alguien la lee y luego se guarda otra, pero no cambia la fecha/hora modificada. Usaría la marca de tiempo a menos que haya un requisito para seguir la fecha de la última modificación en los registros.
Para comprobarlo, puede hacer lo que @KM sugiere e incluirlo en la cláusula update statement where. O puede comenzar una transacción, verificar la marca de tiempo, si todo está bien hacer la actualización, luego confirmar la transacción, si no, devolver un error o código de falla.
La celebración de transacciones abiertas (como lo sugiere @le dorfier) es similar al bloqueo pesimista, pero la cantidad de datos bloqueados puede ser más que una fila. La mayoría de los bloqueos RDBM en el nivel de página por defecto.También se encontrará con los mismos problemas que con el bloqueo pesimista.
Menciona en su pregunta que le preocupan las actualizaciones conflictivas. Eso es lo que el bloqueo evitará seguramente. Tanto la voluntad optimista como la pesimista, cuando se implementan adecuadamente, evitan exactamente eso.
Me gusta la fecha del último cambio mejor que el tipo de datos de marca de tiempo porque contiene datos útiles. También tenemos un LastChgID para rastrear a la persona, ambas columnas son agradables de mostrar, donde una columna de tipo de datos de marca de tiempo no tiene sentido para mostrar. –
Si este tipo de datos ya es un requisito, entonces no hay razón para no usarlo. He actualizado mi respuesta en consecuencia. – pipTheGeek