Du har rätt i att problemet uppstår eftersom SQLite kontrollerar begränsningarna efter varje raduppdatering och inte i slutet av uttalandet eller slutet av transaktionen.
Jag ser denna lösning på problemet (med att SQLite inte har implementerat UPDATE korrekt). Förutsatt att priority kolumnen inte har några negativa värden, vi kan använda dem (negativa värden) som tillfälliga för att undvika UNIQUE begränsningsfel:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;