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

Ví dụ tối thiểu về việc sử dụng select ... để cập nhật để cô lập các hàng

SELECT ... FOR UPDATE khóa (các) hàng ở chế độ độc quyền, có nghĩa là lựa chọn thứ hai không thể tiếp tục cho đến khi lựa chọn đầu tiên hoàn thành hoặc quay trở lại. Điều này là do kết quả của lựa chọn thứ hai có thể bị ảnh hưởng bởi nội dung của hàng bạn đã khóa, vì vậy nó cần phải có khóa đọc cho hàng để kiểm tra.

Nếu bạn tạo một UNIQUE INDEX trên ví dụ id , bạn có thể làm;

select * from SolrCoresPreallocated where id=1 for update;

trong giao dịch đầu tiên và;

select * from SolrCoresPreallocated where id=2 for update;

trong thứ hai một cách độc lập, vì chỉ mục duy nhất cho phép lựa chọn thứ hai tìm thấy hàng chính xác mà không cần đọc khóa hàng đầu tiên.

CHỈNH SỬA:Để có hàng "miễn phí" nhanh nhất có thể, cách duy nhất thực sự là thực hiện hai giao dịch;

  • BẮT ĐẦU / CHỌN CẬP NHẬT / CẬP NHẬT thành bận / CAM KẾT để nhận hàng.
  • BẮT ĐẦU / / UPDATE để miễn phí / CAM KẾT xử lý hàng và giải phóng nó.

Điều này có nghĩa là bạn có thể cần các hành động bù đắp trong trường hợp một quy trình không thành công và quay trở lại giao dịch sẽ CẬP NHẬT hàng để giải phóng, nhưng vì MySQL (hoặc SQL tiêu chuẩn cho vấn đề đó) không có khái niệm "lấy hàng được mở khóa tiếp theo ", bạn không có nhiều lựa chọn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhóm theo mệnh đề trong mySQL và postgreSQL, tại sao lỗi trong postgreSQL?

  2. Lấy dữ liệu từ hai bảng có mối quan hệ khóa ngoài trong Django?

  3. Cảnh báo:mysqli ::mysqli ():(HY000 / 1045):Quyền truy cập bị từ chối đối với người dùng 'cơ sở dữ liệu' @ 'localhost' (sử dụng mật khẩu:NO) trong

  4. MySQL - tổng (các) giá trị cột dựa trên hàng từ cùng một bảng

  5. Cảnh báo:mysql_query ():3 không phải là tài nguyên MySQL-Link hợp lệ