Разница между блокировками таблиц и строк

0

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

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

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

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

Теги:
rowlocking

1 ответ

0

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

Документация MySQL показывает следующее:

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

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

Теперь, когда использовать: здесь печально известна "Это зависит": спросите себя, что является прецедентом для этой транзакции?

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню