SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Simulieren Sie ORDER BY in SQLite UPDATE, um die Einschränkung der Eindeutigkeit zu handhaben

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 ;