次のクエリがMySQL 5.1のINNODBテーブルで実行された場合、私には不明です(MySQLドキュメントを読むことによって)バッチ内のすべての行を内部的に更新(合計5000件)するか、またはすべての行をロック解除します。データベースの負荷が非常に大きいので、これは非常に重要です。SELECTを使用してUPDATEを実行すると、各行またはすべてのSELECTレコードがロックされます
UPDATE `records`
INNER JOIN (
SELECT id, name FROM related LIMIT 0, 5000
) AS `j` ON `j`.`id` = `records`.`id`
SET `name` = `j`.`name`
私は必ずそれがそうであるようにする方法を知らないと私はそれが行ごとにあることを期待しますがしたい、私はより深い知識を持つ人を依頼することを決めました。これが当てはまらず、dbがセット内のすべての行をロックする場合は、理由を説明すると感謝します。
トランザクションを使用していますか? (自動コミット=オフ)? ps:あなたのクエリは意味的に正しいですか? – Sebas
これはおそらくすべての行をロックします。なぜなら、これはMySQLのロールバック方法だからです。 – GolezTrol
ああ、もちろん、テーブルの種類によって異なります。http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html – GolezTrol