Sie haben Recht, dass das Problem auftritt, weil SQLite die Einschränkungen nach jeder Zeilenaktualisierung überprüft und nicht am Ende der Anweisung oder am Ende der Transaktion.
Ich sehe diese Problemumgehung für das Problem (dass SQLite UPDATE
nicht implementiert hat korrekt). Angenommen, die priority
Spalte keine negativen Werte hat, können wir sie (negative Werte) als vorübergehend verwenden, um den UNIQUE
zu vermeiden Beschränkungsfehler:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;