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 ;