Tiene razón en que el problema aparece porque SQLite verifica las restricciones después de cada actualización de fila y no al final de la declaración o al final de la transacción.
Veo esta solución al problema (de que SQLite no haya implementado UPDATE
correctamente). Suponiendo que la priority
columna no tiene valores negativos, podemos usarlos (valores negativos) como temporales para evitar el UNIQUE
errores de restricción:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;