Tôi muốn các giao dịch đồng thời chọn một hàng từ bảng, đánh dấu là "bẩn" để các giao dịch khác không thể chọn nó, sau đó thực hiện phần còn lại của Giao dịch.Ví dụ tối thiểu sử dụng lựa chọn ... để cập nhật cách ly hàng
Tôi gặp sự cố khi sử dụng select... for update
cho mục đích này vì giao dịch thứ hai có ý nghĩa như nhau. Vui lòng cung cấp ví dụ tối thiểu cho các giao dịch khác nhau để chọn các hàng riêng biệt.
dữ liệu của tôi là:
mysql> select * from SolrCoresPreallocated;
+----+-------------+-----+-----+
| id | used_status | sid | cid |
+----+-------------+-----+-----+
| 1 | 0 | 0 | 400 |
| 2 | 0 | 0 | 401 |
| 3 | 0 | 0 | 402 |
| 4 | 0 | 0 | 403 |
| 5 | 0 | 0 | 404 |
| 6 | 0 | 0 | 405 |
+----+-------------+-----+-----+
6 rows in set (0.00 sec)
Và công cụ này không hoạt động như mong đợi:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from SolrCoresPreallocated order by id limit 1 for update;
+----+-------------+-----+-----+
| id | used_status | sid | cid |
+----+-------------+-----+-----+
| 1 | 0 | 0 | 400 |
+----+-------------+-----+-----+
1 row in set (0.00 sec)
...set the used_status to 1
...perform the rest of the operations
... như giao dịch thứ hai trở đi
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from SolrCoresPreallocated order by id limit 1 for update;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
Chính xác những gì bạn làm không mong đợi? –
bao gồm rằng quá – aitchnyu