Du har ret i, at problemet opstår, fordi SQLite kontrollerer begrænsningerne efter hver rækkeopdatering og ikke ved slutningen af sætningen eller slutningen af transaktionen.
Jeg ser denne løsning på problemet (med at SQLite ikke har implementeret UPDATE korrekt). Forudsat at priority kolonnen ikke har nogen negative værdier, vi kan bruge dem (negative værdier) som midlertidige for at undgå UNIQUE begrænsningsfejl:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;