Хотя это SQL-сервер, он также применим и к mySQL: Что такое блокировки строк, страниц и таблиц?И когда они приобретены? .
Документация MySQL показывает это :
Обычно блокировки таблиц превосходят блокировки на уровне строк в следующих случаях:
- Большинство операторовдля таблицы - чтение.
- Операторы для таблицы представляют собой сочетание операций чтения и записи, где записи представляют собой обновления или удаления для одной строки, которую можно извлечь с помощью одного чтения ключа:
- SELECTв сочетании с одновременными операторами INSERT и очень немногими операторами UPDATE или DELETE.
- Многие операции сканирования или операции GROUP BY по всей таблице без каких-либо писателей.
Теперь, когда следует использовать: печально известнуюЗдесь применимо «зависит»: спросите себя, каков вариант использования для этой транзакции?
Обычно блокировка на уровне строк будет использоваться, когда требуется высокий гранулярный контроль.На мой взгляд, это должно быть использовано по умолчанию.Скажите таблицу заказов или подробностей заказов, где заказ может быть обновлен или удален.Блокировка всей таблицы в таблице с большим объемом транзакции не имеет смысла.Я хочу, чтобы пользователи отдельных заказов могли обновлять каждый заказ, а не блокировать кого-либо еще, когда я знаю, что область их изменения ограничена конкретным заказом.
Теперь, если мне нужно восстановить заказы итаблица данных из резервной копии по некоторым причинам;или сделать много обновлений для многих записей на основе внешнего источника;Я могу заблокировать всю таблицу, чтобы убедиться, что все обновления завершены успешно, и я могу проверить загрузку, прежде чем позволить кому-либо вернуться обратно. Я не хочу никаких изменений, пока я делаю необходимые обновления.Но мы должны рассмотреть, не повлияет ли блокировка всей таблицы на пользовательский опыт;или если у нас нет других доступных вариантов.Блокировка на уровне таблицы не позволит другим пользователям изменять какие-либо значения.Это действительно то, что мы хотим?