Tôi có bảng quầy sau:
CREATE TABLE cache (
key text PRIMARY KEY,
generation int
);
Tôi muốn tăng một trong các bộ đếm hoặc đặt nó thành 0 nếu hàng tương ứng chưa tồn tại. Có cách nào để làm điều này mà không gặp vấn đề đồng thời trong SQL chuẩn không? Hoạt động đôi khi là một phần của giao dịch, đôi khi tách biệt.
SQL phải chạy không sửa đổi trên SQLite, PostgreSQL và MySQL, nếu có thể.
Một tìm kiếm mang lại một số ý tưởng hoặc gặp phải các vấn đề đồng thời hoặc cụ thể đối với cơ sở dữ liệu:
Hãy thử
INSERT
một hàng mới vàUPDATE
nếu có lỗi. Rất tiếc, lỗi khiINSERT
hủy giao dịch hiện tại.UPDATE
hàng và nếu không có hàng nào được sửa đổi, thìINSERT
một hàng mới.MySQL có một
ON DUPLICATE KEY UPDATE
mệnh đề.
CHỈNH SỬA: Cảm ơn vì tất cả các câu trả lời tuyệt vời. Có vẻ như Paul đã đúng, và không có một cách di động nào để làm điều này. Điều đó khá ngạc nhiên đối với tôi, vì nó có vẻ giống như một hoạt động rất cơ bản.