Masz rację, że problem pojawia się, ponieważ SQLite sprawdza ograniczenia po każdej aktualizacji wiersza, a nie na końcu instrukcji lub transakcji.
Widzę to obejście problemu (z SQLite nie zaimplementowanym UPDATE
prawidłowo). Zakładając, że priority
kolumna nie ma żadnych wartości ujemnych, możemy ich użyć (wartości ujemne) jako tymczasowe, aby uniknąć UNIQUE
błędy ograniczeń:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;