SQLiteは、ステートメントの終了時やトランザクションの終了時ではなく、行が更新されるたびに制約をチェックするため、問題が発生するのは間違いありません。
(SQLiteがUPDATE
を実装していないという問題に対するこの回避策がわかります 正しく)。 priority
と仮定します 列に負の値はありません。UNIQUE
を回避するために、それら(負の値)を一時的なものとして使用できます。 制約エラー:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;