Những gì bạn cần làm là thêm một số loại khóa ở đây để ngăn chặn các điều kiện đua giống như điều bạn đã tạo:
UPDATE persons SET processing=1 WHERE id=:id AND processing=0
Điều đó sẽ tránh bị khóa hai lần.
Để cải thiện điều này nhiều hơn nữa, hãy tạo một cột khóa mà bạn có thể sử dụng để xác nhận quyền sở hữu:
UPDATE persons
SET processing=:processing_uuid
WHERE processing IS NULL
LIMIT 1
Điều này yêu cầu VARCHAR
, xử lý processing
được sử dụng để xác nhận quyền sở hữu có giá trị mặc định là NULL
. Nếu bạn nhận được một hàng được sửa đổi trong kết quả, bạn đã xác nhận một bản ghi và có thể bắt đầu làm việc với nó bằng cách sử dụng:
SELECT * FROM persons WHERE processing=:processing_uuid
Mỗi lần bạn thử và xác nhận quyền sở hữu, hãy tạo một khóa UUID xác nhận quyền sở hữu mới.