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 ;