Nie jest dla mnie jasne (czytając dokumenty MySQL), czy następujące zapytanie uruchomione na tabelach INNODB w MySQL 5.1, spowoduje utworzenie WRITE LOCK dla każdego wiersza bazy danych aktualizacje wewnętrznie (łącznie 5000) lub ZABLOKUJ wszystkie wiersze w partii. Ponieważ baza danych ma naprawdę duże obciążenie, jest to bardzo ważne.AKTUALIZACJA za pomocą SELECT, spowoduje zablokowanie każdego wiersza lub wszystkich wybranych rekordów
UPDATE `records`
INNER JOIN (
SELECT id, name FROM related LIMIT 0, 5000
) AS `j` ON `j`.`id` = `records`.`id`
SET `name` = `j`.`name`
będę oczekiwać, że będzie w rzędzie, ale jak ja nie wiem, aby upewnić się, że jest tak, zdecydowałem się poprosić kogoś z głębszej wiedzy. Jeśli tak nie jest, a db zablokuje wszystkie wiersze w zestawie, byłbym wdzięczny, gdybyś dał mi wyjaśnienie, dlaczego.
Czy korzystasz z transakcji? (autocommit = off)? ps: czy jesteś pewien, że twoje zapytanie jest semantycznie poprawne? – Sebas
Prawdopodobnie zablokuje wszystkie wiersze, ponieważ tak właśnie działa MySQL. – GolezTrol
Och, czekaj, zależy to oczywiście od rodzaju stołu: http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html – GolezTrol