Propel Row Lock Batch Update Problema
-
10-07-2019 - |
Pregunta
Estoy usando Propel como mi ORM.
Necesito hacer una actualización por lotes de una tabla con los siguientes campos:
ID
Company
Assigned
La actualización incluirá una matriz de Company
y establecerá el campo Assigne
d en 1
.
El problema es que puede haber 2 actualizaciones por lotes que ocurren al mismo tiempo. Entonces, cuando eso suceda, tendré que aceptar una actualización y rechazar otra. ¿Hay alguna forma de bloquear la tabla para una actualización por lotes? ¿O hay una mejor solución?
Solución
Aquí está la solución que encontré.
En lugar de bloquearlo, una mejor manera es usar la siguiente consulta equivalente al realizar la actualización por lotes
update table
set Assigned=2
where Assigned=1
and Company in {company1, company2}
Ahora, si el número de filas devueltas no es el mismo que el número de Company
seleccionado, entonces toda la operación debería ser revertido .