Разница между блокировками таблиц и строк - PullRequest
0 голосов
/ 21 мая 2018

Я изучаю MySQL и то, как он работает, и что-то меня смущает, и я не нахожу в Интернете четких объяснений по этому поводу.

В чем разница между блокировками строк и таблиц?Один блокирует ряд, а другой - стол.Правильный?

Итак, в каких ситуациях вы бы использовали блокировку таблицы и строки?Это то, что программист или менеджер баз данных может программировать, или это enigne, который делает это для вас?

Если есть какая-либо другая информация, которую вы считаете полезной, не стесняйтесь добавить ее к своему ответу.Я извиняюсь за этот возможный вопрос, но я все еще учусь.

1 Ответ

0 голосов
/ 21 мая 2018

Хотя это SQL-сервер, он также применим и к mySQL: Что такое блокировки строк, страниц и таблиц?И когда они приобретены? .

Документация MySQL показывает это :

Обычно блокировки таблиц превосходят блокировки на уровне строк в следующих случаях:

  • Большинство операторовдля таблицы - чтение.
  • Операторы для таблицы представляют собой сочетание операций чтения и записи, где записи представляют собой обновления или удаления для одной строки, которую можно извлечь с помощью одного чтения ключа:
  • SELECTв сочетании с одновременными операторами INSERT и очень немногими операторами UPDATE или DELETE.
  • Многие операции сканирования или операции GROUP BY по всей таблице без каких-либо писателей.

Теперь, когда следует использовать: печально известнуюЗдесь применимо «зависит»: спросите себя, каков вариант использования для этой транзакции?

Обычно блокировка на уровне строк будет использоваться, когда требуется высокий гранулярный контроль.На мой взгляд, это должно быть использовано по умолчанию.Скажите таблицу заказов или подробностей заказов, где заказ может быть обновлен или удален.Блокировка всей таблицы в таблице с большим объемом транзакции не имеет смысла.Я хочу, чтобы пользователи отдельных заказов могли обновлять каждый заказ, а не блокировать кого-либо еще, когда я знаю, что область их изменения ограничена конкретным заказом.

Теперь, если мне нужно восстановить заказы итаблица данных из резервной копии по некоторым причинам;или сделать много обновлений для многих записей на основе внешнего источника;Я могу заблокировать всю таблицу, чтобы убедиться, что все обновления завершены успешно, и я могу проверить загрузку, прежде чем позволить кому-либо вернуться обратно. Я не хочу никаких изменений, пока я делаю необходимые обновления.Но мы должны рассмотреть, не повлияет ли блокировка всей таблицы на пользовательский опыт;или если у нас нет других доступных вариантов.Блокировка на уровне таблицы не позволит другим пользователям изменять какие-либо значения.Это действительно то, что мы хотим?

...