Không rõ ràng với tôi (bằng cách đọc tài liệu MySQL) nếu truy vấn sau chạy trên bảng INNODB trên MySQL 5.1, sẽ tạo WRITE LOCK cho mỗi hàng db cập nhật nội bộ (5000 trong tổng số) hoặc LOCK tất cả các hàng trong lô. Vì cơ sở dữ liệu có tải nặng, điều này rất quan trọng.CẬP NHẬT với CHỌN, nó sẽ khóa mỗi hàng hoặc tất cả các hồ sơ được chọn
UPDATE `records`
INNER JOIN (
SELECT id, name FROM related LIMIT 0, 5000
) AS `j` ON `j`.`id` = `records`.`id`
SET `name` = `j`.`name`
Tôi mong rằng nó sẽ là một hàng nhưng vì tôi không biết cách đảm bảo, tôi quyết định hỏi ai đó có kiến thức sâu hơn. Nếu đây không phải là trường hợp và db sẽ KHÓA tất cả các hàng trong tập hợp, tôi sẽ biết ơn nếu bạn cho tôi giải thích lý do tại sao.
Bạn đang sử dụng giao dịch? (autocommit = off)? ps: bạn có chắc là truy vấn của bạn là correcT semantically? – Sebas
Nó có thể sẽ khóa tất cả các hàng, bởi vì đó là cách MySQL cuộn. – GolezTrol
Ồ chờ đã, nó phụ thuộc vào loại bảng, tất nhiên: http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html – GolezTrol