Прав сте, че проблемът се появява, защото SQLite проверява ограниченията след всяка актуализация на ред, а не в края на оператора или в края на транзакцията.
Виждам това заобикаляне на проблема (за това, че SQLite не е внедрил UPDATE
правилно). Ако приемем, че priority
колоната няма отрицателни стойности, можем да ги използваме (отрицателни стойности) като временни, за да избегнем UNIQUE
грешки при ограничения:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;