Trong một bảng trong đó mỗi hàng có một bộ đếm (chỉ là một giá trị số nguyên), tôi cần lấy giá trị hiện tại và tăng nó cùng một lúc .
Hiệu quả, tôi muốn làm điều này:
SELECT counter FROM table WHERE id=123
UPDATE table SET counter=counter+1 WHERE id=123
Nhưng thực hiện điều này như hai truy vấn rõ ràng là không an toàn luồng: nhiều quy trình thực hiện cùng một thứ (trên cùng một hàng) có thể nhận được cùng một giá trị truy cập. Tôi cần tất cả chúng là duy nhất, vì vậy mỗi quy trình sẽ nhận được giá trị hiện tại thực tế và tăng nó lên một.
Tôi có thể nghĩ về một công trình nơi tôi thực hiện khóa thủ công mỗi hàng, nhưng tôi tự hỏi liệu có cách nào dễ dàng hơn để làm việc này không?