Bạn nói đúng rằng sự cố xuất hiện vì SQLite kiểm tra các ràng buộc sau mỗi lần cập nhật hàng chứ không phải ở cuối câu lệnh hoặc khi kết thúc giao dịch.
Tôi thấy giải pháp này cho sự cố (do SQLite chưa triển khai UPDATE một cách chính xác). Giả sử rằng priority cột không có bất kỳ giá trị âm nào, chúng tôi có thể sử dụng chúng (giá trị âm) tạm thời để tránh UNIQUE lỗi ràng buộc:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;