#mysql #locks
Вопрос:
Согласно документации MySQL, все типы блокировок являются разными типами блокировок. Но все они используют для совместного ИСПОЛЬЗОВАНИЯ или ДЛЯ инструкции ОБНОВЛЕНИЯ в качестве блокировок намерений. Поэтому я не могу понять, являются ли блокировки записей, блокировки пробелов, блокировки следующего ключа, блокировки намерений вставки и блокировки АВТОМАТИЧЕСКОГО включения частью блокировок намерений или это абсолютно разные типы блокировок, но с одинаковым синтаксисом
Комментарии:
1. как вы получили это понятие? и ответ явно отрицательный
2. Например, есть пример блокировки записи, который выглядит как ВЫБЕРИТЕ c1 ИЗ t, ГДЕ c1 = 10 ДЛЯ ОБНОВЛЕНИЯ; в документации в разделе Блокировки записей
3. FOR update выполнит блокировку строк для выбранных строк, но если у вас много строк, вы получаете блокировку таблицы, это не имеет ничего общего с блокировками намерений
4. Я не уверен на 100%, о чем вы спрашиваете, но чтобы уточнить эту документацию: эти блокировки не являются тем, что вы выбираете напрямую. Вы сообщаете MySQL свой уровень изоляции, пишете свой запрос (возможно, указывая
for update/share
), и MySQL сам выбирает правильные внутренние блокировки для обеспечения надлежащего поведения. Эти детали являются «просто» технической документацией, вы можете использовать MySQL абсолютно правильно, даже не слыша о блокировках следующего ключа.
Ответ №1:
Нет, вы смешиваете блокировки намерений с различными типами фактических блокировок!
Как говорится в документации mysql, которую вы указали в своем вопросе (курсив мой):
Блокировки намерений — это блокировки на уровне таблицы, которые указывают, какой тип блокировки (общий или эксклюзивный) требуется транзакции позже для строки в таблице.
Все остальные перечисленные вами блокировки являются фактическими блокировками, используемыми при выполнении инструкций insert, update или delete.