Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Khóa hàng chọn MySQL cho đến khi CẬP NHẬT đã được chạy trên đó?

Đặt một giao dịch xung quanh hai truy vấn và sử dụng FOR UPDATE trong tùy chọn SELECT truy vấn để khóa các hàng mà nó đã kiểm tra. Bất kỳ kết nối nào khác cố gắng đọc hàng đó sẽ bị tạm ngưng cho đến khi giao dịch được cam kết.

Đảm bảo rằng bạn có chỉ mục trên các cột bạn kiểm tra trong WHERE , vì vậy nó sẽ không phải quét và khóa tất cả các hàng mà nó đã kiểm tra trước khi tìm thấy hàng mà bạn muốn.

START TRANSACTION;

SELECT @id := `id`,`item` 
FROM `queue_items` 
WHERE `processed_at` IS NULL AND `completed_at` IS NULL 
ORDER BY `id` ASC 
LIMIT 1
FOR UPDATE;

UPDATE `queue_items` SET `processed_at` = @processedAt WHERE `id` = @id

COMMIT;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dịch vụ web RESTful:java.lang.NullPointerException service.AbstractFacade.findAll

  2. Trình kết nối MySQL cho Python

  3. trong khi ($ row =mysql_fetch_array ($ query)) không hoạt động ở lần thứ hai

  4. Trợ giúp về hiệu suất:SUBQUERY so với JOIN

  5. Quyền truy cập bị từ chối; bạn cần (ít nhất một trong số) (các) đặc quyền SUPER cho hoạt động này